初学C语言Bug大赏( 二 )


初学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;}感悟:这种错误是比较容易犯的 , 特别是零基础的小白和那些先学Python后学C语言的人(因为Python语句结束不用在它后面加" ; ",会有点不习惯) 。
改过后的代码以及它的运行图 , 如图:
初学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",也可以这么表达 。 这是错误的!


推荐阅读