初学C语言Bug大赏( 二 )
#include #include int main(){char String[5];printf("请输入4位数的密码:\n");gets(String);//接收用户的输入密码int Stringlength=strlen(String);if(Stringlength==4)//判断输入的数是否超位{if(strcmp(String,"1234")==0)//密码是:1234{printf("密码正确");//这里写的”;“是中文的符号 , 要改为英文的”;“(这里有一点看不出来)}else{printf("密码错误");}}else{printf("格式错误!你输入了%d位的密码",Stringlength);}return 0;}
感悟:这个问题还好 , 用个好一点的编程软件就好了(因为你输入的中文标点符号和英文的标点符号在编程软件中的颜色是不一样的) 。 只不过如果你是用VC6来写代码 , 就没有这功能 , 很难看出二者的区别 。 (我用的是CodeBlocks , 还不错!)
它俩区别在编程软件上的效果图:
文章插图
上面黑色的分号是中文符号 , 下面红色的是英文符号
四.数学表达式上的惯性思维#include #include int main(){int x=5;int a=2x-1;//这里少写了* , 应改为“int a=2*x-1;”printf("%d",a);//将输出9return 0;}
感悟:哈哈哈 , 这个问题我就经常犯[捂脸] 。 经常漏掉”*“运算符 。 逻辑上没错 , 但表达上错了 。
运行效果图:
文章插图
五.char类型赋值时单引号写成了双引号#include #include int main(){char a="a"; //单引号写成了双引号.要改成“ char a='a'; ”printf("%c",a);//将输出areturn 0;}
感悟:乱迁移printf(" ");这种双引号表达 , char类型要用单引号 。
当然关于char也可以这么写:
#include #include int main(){char a=97; //单引号写成了双引号.要改成“ char a='aprintf("%c",a);//将输出areturn 0;}
以上两种表达运行效果是一样的 , 都是输出a
如图:
文章插图
六.乱迁移printf语句的指定数据宽度和小数位数用法在scanf语句上#include #include int main(){floata=0;scanf("%.2f",printf("%.2f",a);return 0;}
感悟:以为printf("%.2f",a);可以这么表达 , 那scanf("%.2f",也可以这么表达 。 这是错误的!
【初学C语言Bug大赏】说到scanf函数不得说一下它的定义宽度的问题:
#include #include int main(){int a=0;//对变量a进行初始化scanf("%2d",//输入数字(只读入2个字符)printf("%d",a);//它将输出你刚刚输入的数字的前两位字符return 0;}
运行效果图:
文章插图
后面的3456以整型的方式存在于缓存中
好了 , 我的总结到此结束!谢谢大家的耐心阅读[笑]
大家一起进步!
- 设计语言|全新家族设计,三星Galaxy A32渲染图曝光
- 曝光|微软新专利曝光 可以与会者面部表情和肢体语言为会议打分
- 学习C语言的软件,就突然被我绿了?
- LeetCode第1 题:两数之和 Go语言精解
- 清华大学刘知远:知识指导的自然语言处理
- 盘点:2020年5种流行的 AI 编程语言,就业高薪不是梦
- 禁止拷贝构造,禁止bug
- Rust能不能做后端开发语言?
- 零基础学习编程语言将面临哪几道门槛,以及该如何解决
- 有关自然语言处理的深度学习知识有哪些?