c语言 为什么scanf加了个\n会差别那么大。。

#include<stdio.h>
int i;
int s[3];
main()
{
for( i=0;i<3;i++)
{
scanf("%d\n",&s[i]);
printf( "[第 %d 次] -- %d\n", i, s[i]);
}
getch();
}

#include<stdio.h>
int i;
int s[3];
main()
{
for( i=0;i<3;i++)
{
scanf("%d",&s[i]);
printf( "[第 %d 次] -- %d\n", i, s[i]);
}
getch();
}

为什么scanf加了个\n会差别那么大。。
第一个要输入两个数才可以运行 第二个一个就可以了

scanf("%d\n",&s[i]);
在scanf的输入格式串中,除了定义的输入变量类型,其它字符在定义了在输入中接收这些字符
"%d\n"这表示,scanf在接收一个整形数后,再接收一个换行符

scanf("%d,%d",&a,&b);
这就要求输入时,两个整形间要有一个逗号隔开

123,465(如果没有中间没有逗号,那是会出错的~)
反正就是,在格式串中定义的非类型控制符,那么相应的在输入时也要输入这个字符
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-19
printf和scanf函数除了作用以外,其他都一样的,
叫做格式化输入/输出函数
他们遵守一个规则,那就是原样输入/输出
比如说我
scanf("asd");
那这个scanf就是要等你输入了asd之后才会执行接下来的代码
不过好像现在没有这个标准了
当我们需要接受值给变量的时候
就需要一个以%开头的格式控制符才占位,
在该位置的时候收到的值,赋值给变量
如果你在scanf()中写入了一个\n
他就要求是要接收到\n才会继续执行
当然这里他需要的并不是字符串\n,
而是一个换行符
第2个回答  2011-01-20
scanf比较笨拙,要求用户输入和它第一个参数一模一样的内容.刚好\n和回车的效果是一样的,于是你第一次回车的时候它去取用户输入,发现回车还没输入(就是被scanf当做取字符分析而不是当做\n处理了).于是要再敲一次..
第3个回答  2015-10-05
在用函数scanf()输入非字符型数据时,以下几种情况认为数据输入一结束:
1、键入空格符、回车符、制表符
2、达到指定宽度,如,scanf("%2d",a);若你输入1234,则传送到a的只是12
3、输入非数字字符
函数scanf()格式控制字符串中含有'\n'等转义字符,会导致数据输入不能按照正常方式终止。
第4个回答  2011-01-21
scanf()是格式输入函数.它规定的参数只有两类,一类是格式串,一类是数据的地址.而且,格式中里的格式符数必须与数据一致.你没按它的规定使用.当然出错.

c语言 为什么scanf加了个\\n会差别那么大。。
"%d\\n"这表示,scanf在接收一个整形数后,再接收一个换行符 如 scanf("%d,%d",&a,&b);这就要求输入时,两个整形间要有一个逗号隔开 如 123,465(如果没有中间没有逗号,那是会出错的~)反正就是,在格式串中定义的非类型控制符,那么相应的在输入时也要输入这个字符 ...

C语言中scanf函数中加\\n为什么会这样
在scanf里 \\n 很特别的,不是要求输入一个回车换行。老师应该专门强调一下这点。引用一下别人的说法:过滤空格、制表符、回车等输入,也就是说 scanf("%d\\n", &i);printf("%d\\n", i);你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束。

C语言关于scanf函数问题
第一个问题,因为你的scanf函数使用了域宽来指定读入的格式。所谓域宽,就是说读入的时候把某个宽度内的值付给某变量。那么。你第一个参数读入规则是%3c,意思是设置域宽为3,读入一个char型数据。你输入的是abcde。那么前面的abc将作为第一个参数给一个char型数据。而char型数据只需要一个字符,所以a...

C语言,如果在scanf函数里加\\n为什么只影响第一次循环
scanf中加入\\n就是告诉scanf函数,你要在这个位置输入一个回车符,请忽略 由于scanf默认以回车为输入结束,因此你在输入时要记住在你指定的哪个位置需要多输入一个回车才能让scanf正常接收数据

C语言的scanf("%d\\n",&r);只要加入\\n逻辑就错了,有大神能告诉我为什么...
\\n就结束输入了,scanf函数的第一个参数是都要输入的,你这个"%d\\n",就需要先输入一个整数,再输入一个"\\",再输入一个"n",再回车,所以一直阻塞在这,随便搜的一个博客,看看应该就理解了 网页链接

c语言中\\n怎么用
1、scanf中通常是不需要加\\n的,不加的时候,从键盘输入回车,表示输入结束了;如果加了\\n,键盘输入的回车就被当成输入的字符了,需要再次输入非空白的字符才能结束输入,而且容易导致混乱,所以不建议在scanf中加\\n 2、printf中的\\n就很好理解了,就是表示输出一个换行。

在C语言中scanf("%d\\n",&a);这个语句,加上\\n 为什么在键盘输入的时候...
scanf(" "), scanf("\\n")效果是相同的:表明scan函数会读取空格、TAB、回车直到第一个非空字符为止。详细可以参见scanf()函数format字符串的详细解释。format C string that contains one or more of the following items:Whitespace character: the function will read and ignore any whitespace ...

谁帮我看下 C语言问题?scanf中加\\n之后的作用
当你从键盘输入数据时,是先放在该缓冲中,然后scanf才从该缓冲中读数据,你不加\\n时,你输入i的值,然后回车想再输入m的值吧?这时送到缓冲中的就是i的值和一个回车符,所以scanf第一次读的是i,第二次读的就是一个回车符,所以printf(" %c\\n",m);输出的是回车,而不是你理想中的m值,...

C语言小白。为什么程序加了printf("\\n");后程序出错,可是没加则可以...
这个应该就不是加不加这条语句的问题,这个语句的含义就是多输出一个换行,不影响程序结果,只影响程序输出格式。

为什么c语言中,如果在scanf括号中最后写上\\n,程序运行时,输入后会没...
等待输入'\\n',可是scanf把最后打入的'\\n'当作接收命令而不赋给变量,所以要再输入一个数据再打回车才能向下走,而且输入的是上一次的数据,第二次打入的数据并未接收。所以这种写法是错误的,要坚决避免。

相似回答