曾经错的几个地方:(xpsp2,vc6.0环境下) 1.空白符问题 #include main() { int a; printf("input the datan"); scanf("%dn",&a);//这里多了一个回车符n printf("%d",a); return 0; } 结果要输入两个数程序才结束,而不是预期的一个。why? 原因:用空白符结尾时,scanf会跳过空白符去读下一个字符,所以你必须再输入一个数。这里的空白符包括空格,制表符,换行符,回车符等。所以如果你用scanf("%d ",&a)也会出现同样的问题。 解决方法:这种错误大多是输入的时候不小心,多注意一点就好了。这种问题也不好检查,编译没有问题,一个空格也不容易看出来。当你的程序出现上面的问题时,自己对照检查一下就可以了。 2.缓冲区问题(“垃圾”字符) 这是一个非常容易错的地方,我就错过多次。 #include main() { int n = 5; char c[n]; for(int i = 0; i < n; i++) c = scanf("%c",&c); printf(c); return 0; } 如果输入: a b c 那么循环就会“提前”结束了. 原因:输入a和第一个回车后,a和这个回车符都留在缓冲区中。第一个scanf读取了a,但是输入缓冲区里面还留有一个n,第二个scanf读取这个n。然后输入b和第二个回车,同样的,第三个scanf读取了b,第四个scanf读取了第二个回车符。第五个读取了c。所以五个scanf都执行了,并没有提前结束。只不过有的scanf读取到了回车符而已。 解决方法:把程序改成这样就可以了: for( i = 0; i < n; i++){ scanf("%c",&c); fflush(stdin);//刷新缓冲区 } 或者不用scanf,而用gets()函数,如: #include main() { char c[5]; gets(c); printf(c); return 0; } 但要注意:这个函数自动把你最后敲的回车转换为字符' |