初学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 , 还不错!)
它俩区别在编程软件上的效果图:
初学C语言Bug大赏文章插图
上面黑色的分号是中文符号 , 下面红色的是英文符号
四.数学表达式上的惯性思维#include #include int main(){int x=5;int a=2x-1;//这里少写了* , 应改为“int a=2*x-1;”printf("%d",a);//将输出9return 0;}感悟:哈哈哈 , 这个问题我就经常犯[捂脸] 。 经常漏掉”*“运算符 。 逻辑上没错 , 但表达上错了
运行效果图:
初学C语言Bug大赏文章插图
五.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
如图:
初学C语言Bug大赏文章插图
六.乱迁移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;}运行效果图
初学C语言Bug大赏文章插图
后面的3456以整型的方式存在于缓存中
好了 , 我的总结到此结束!谢谢大家的耐心阅读[笑]
大家一起进步!