8. 错误如了\n,则应原样输入以保证程序的正确执行(按理应如此,但实际只要输入个除了tab、空格、回车之外的字符即可)。
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a=-1;
- scanf("%d\n",&a);
- printf("%d\n",a);
- return 0;
- }
复制代码
运行情况:
18\n//原样输入
18
Program ended with exit code: 0
由此进行延伸,具体如下:
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a=-1;
- scanf("%d\n",&a);
- printf("%d\n",a);
- return 0;
- }
复制代码
运行情况:
18d//多输入了一个d(tab、空格、回车之外的字符)
18
Program ended with exit code: 0
再进一步延伸:
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- int a=-1;
- scanf("%dabcdef",&a);//不是/n,是一堆乱七八糟的字符
- printf("%d\n",a);
- return 0;
- }
复制代码
运行情况:
18\//多输入了一个\(tab、空格、回车之外的字符)
18
Program ended with exit code: 0
9. 如果scanf缓冲区中还有内容,则scanf会直接获取而不提示我们再输入。
- #include <stdio.h>int main(int argc, const char * argv[]) { int a,b,c,d,e,f; scanf("%d%d%d",&a,&b,&c);//第一次输入
- scanf("%d%d",&d,&e);//第二次输入 printf("%d,%d,%d,%d,%d\n",a,b,c,d,e);
- scanf("%d",&f);//第三次输入
- printf("%d\n",f);
- return 0;
- }
复制代码
运行情况:
11 22 33 44 55 66 77 88//实际却只输入了一次
11,22,33,44,55
66
Program ended with exit code: 0
10. 当需要输入整型或实型时,输入的却是字符,那么不仅这个字符无法被接收,后续的其它变量的接收也中断。
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- float a=-1;
- int b=-2,c=-3;
- scanf("%f%d%d",&a,&b,&c);
- printf("%f,%d,%d\n",a,b,c);
- return 0;
- }
复制代码
运行情况:
4 a 6//第二项按理应输入整形,却输入了字符,所以中断获取,变量b和c保持原值。
4.000000,-2,-3
Program ended with exit code: 0
|
|