本帖最后由 赵林 于 2018-4-21 10:57 编辑
C语言常见错误总结 每次登录啊哈磊网站,都会看到很多人提一些重复的问题。希望以后遇到问题自己想想,实在不行查一下,最后再问。
常见错误:
1.编译成功,运行时却弹出类似这样的窗口:见图片
编译正常,输入1(黑圈),程序却弹出了一个警告窗口(红圈)。是这个原因:
①scanf("%d",a);没写取址符&。应改为scanf("%d",&a);为什么?因为输入的数是存到a的地址里,不是存到a的数值里。 因为我习惯了cin>>a; 所以我经常犯这个错误。没关系,加上&就行了。
2.Sleep()函数
这是最常见的问题之一。(求求大家别再问了!)使用此函数需要注意以下几点:
①S要大写,否则编译器将不能识别
②由于Sleep()函数的定义在Windows.h头文件里,所以要在程序开头写#include <windows.h>
也可以自己写一遍函数定义(这句话初学者请忽略)
③括号里写一个整数,代表等待的毫秒数,请注意,1秒=1000毫秒
④我看到很多人用Sleep(5000);作为程序最后的等待语句,我个人建议一般不要这样做(但有时还是可以的)。
最好调用system("pause");如果不想显示“请按任意继续. . .”的话,改成system("pause>nul");
3.float浮点型
有些人说《啊哈C》30页“更进一步,动手试一试”第1题5.2+3.1输出的是8.299999,不是8.3。这个问题我以前倒还没注意过(因为我用的是C++的cout,cout输出浮点数有默认设置)。现在用printf一试,果真如此。以下是解决方法(啊哈磊也应该改一下代码):
①简单,把float换成double就行了。为什么呢?因为计算机把5.2和3.1存储到变量中是用的2进制,这样存储有些数2进制 会变成无限循环小数。再相加就难免有问题。double精度高一些,可以克服问题。(比如用计算器算1÷3×3,答案是 0.9999999999,而不是1,这是一个道理)
②不定义变量c,把printf("%f",c);改成printf("%f",a+b);或干脆改成printf("%f",5.2+3.1);就行了。这样没有了相加 并存储的步骤,答案就会正确(尽管这样还是强烈建议使用double,还不行就用long double)。
4.编译成功却不能运行。原因:
①看看文件名是不是以.c结尾,生成的文件是不是以.exe结尾。
②另外,文件名在啊哈C中不能有.号。
5.定义变量/函数
①如果编译器下方提示"a"was not declared in this scope(至少Dev-c++的提示是这样,不过啊哈C应该也大同小异), (意思是“a没有在范围内声明”)说明你没有定义a或把a拼错了。仔细检查吧。
②提示invalid suffix "a" on integer constant,说明你定义的变量是以数字开头的。(意思是“a是整型常量的无效后 辍”)编译器认为a是类似u(无符号后辍)、L(长型后辍)这样的后辍。改一下变量名就行了。
③提示stray '\345' in program(引号内会变),说明你用了汉字或¥@#这样的字符定义变量。改变量名就行了。
6.if()判断
判断输入的数是否等于1,:无论输入什么都显示yes
①原因:把if(a==1)写成了if(a=1)。计算机先执行a=1,在判断(a=1)是否为真。《啊哈C》68页讲过,一个数判断真假, 如果是0则为假,否则为真。(a=1)的值是1,为真,所以输出yes。
|