10楼的理解有误,你的之所以能正常输出在于你输入了不合法的字符'\\','n'这两个字符导致scanf函数结束,从而继续往下执行。并非如您所说,要跟着输入"\n"才行.
scanf("%d\n",&a);这种写法很少见到,但不是没有,而且在做某些题的时候必须这样,我遇到过,但我也不知所以然
但一般来说不应该这样做,应尽量降低输入格式的要求.
对不礼貌的女生收钱......
根据教育部考试中心出的C语言标准教程中28页下方说法
"若在scanf的格式控制串中插入了其它字符,则在输入时要求按一一对应的位置原样输入这些字符,例如:
int a1,a2,a3;
scanf("Input a1,a2,a3:%d%d%d",&a1,&a2,&a3);
要求按如下格式输入:
Input a1,a2,a3:10 20 30
"
[此贴子已经被作者于2006-12-1 21:42:23编辑过]
我只是认为你有误,并没有指责你,你的脾气有些急,呵呵.
你所说的scanf函数确实可以有格式要求,如你所说输入的时候要严格按照要求的格式来输入就行.
我所说的是,scanf("%d\n")其中的'\n'是一个字符,你所按照的格式是因为输入的时候输入不合法的字符导致scanf函数运行结束,从而继续想向下执行.而不是你严格遵从了输入要求的格式使得输入成功了。你红色部分的描述是对的,只是对于这句scanf("%d\n",&a);其中的'\n'理解有误,这是个转义字符。
你不妨这样一试:scanf("%d\n",&a);//在测试的时候输入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接收了