我也是遇到了这样的问题,虽然解决了,但还不知道为什么?
9楼的理解有误,你的之所以能正常输出在于你输入了不合法的字符'\\','n'这两个字符导致scanf函数结束,从而继续往下执行。并非如您所说,要跟着输入"\n"才行.
scanf("%d\n",&num);这种写法很少见到,但不是没有,而且在做某些题的时候必须这样.
scanf("%d\n")其中的'\n'是一个字符,你所按照的格式是因为输入的时候输入不合法的字符导致scanf函数运行结束,从而继续想向下执行.而不是你严格遵从了输入要求的格式使得输入成功了。
你不妨这样一试:scanf("%d\n",&num);//在测试的时候输入3a
答案还是一样的。因为a是非法字符(不是整型值),导致输入结束.C不向JAVA,弹出一个异常就终止程序运行,它只会默默的结束运行函数,而后继续向下执行程序.
但一般来说不应该这样做,应尽量降低输入格式的要求.
------------------------------------------------------------------
scanf("%d\n");确实是要求数据后边要有一个\n,但当我们输入5\n的时候,系统会认为它是3个字符,而不是5和回车.由于遇到非法的'\'所以输入结束.
对于下边的程序:
#include <stdio.h>
int main()
{
int a;
char c;
scanf("%d\n", &a);
while ((c=getchar()) != '\n' && c != EOF)/*输出缓冲区的内容*/
printf("%d\n", c);
return 0;
}
输入:
5\n
输出:
92
110
Press any key to continue
92是'\'的ASCII码.110是'n'的ASCII码,说明\n并没有被scanf接收.
再看下边的程序:
#include <stdio.h>
int main()
{
int a;
char c;
scanf("%dab", &a);
while ((c=getchar()) != '\n' && c != EOF)/*输出缓冲区的内容*/
printf("%d\n", c);
return 0;
}
输入:
5ab
输出:
Press any key to continue
你会发现缓冲区并没有内容(除回车),说明ab被scanf接收了