读书人

请问:关于scanf函数的一个小疑点(待!

发布时间: 2012-02-05 12:07:14 作者: rapoo

请教大虾:关于scanf函数的一个小问题(在线等待!)
for (i=0;i <N;i++)
{
printf( "the %d th: ",i+1);
scanf( "%d ",&a[i]);//
scanf( "%d ",&a[i]);/*就是这个空格的问题,有什么好的解释吗???在线等待!*/
}

[解决办法]
空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。

也就是说,对于:
scanf( "%d ", &a);
printf( "%d ", a);

需要输入:3 2后才会打出一个3,因为输入&a之后格式串中还有空格符会略去空白字符,所以要输入一个非空白符才会结束输入。
[解决办法]
scanf( "%d ",&a[i]);// 把这里的 “” 中的空格去掉
scanf( "%d ",&a[i]);

%d 输入整数,这个时候,空格、回车、\t退格符都会被处理为数据分割符,这些分隔符会被自动忽略。
[解决办法]
为什么只是第一个输入那样,而后面的不会呢
-----------------------------------------
第一次输入了两个数,其中第一个数被第一次的scanf ()接收,而第二个数还停留在输入缓冲区中,当遇到下一个scanf ()的时候才被接收到。

如果你在scanf ()后面加一个getchar(),则不会出现你上面那种情况了。

for (int i=0; i <5; i++)
{
printf( "\nthe %d th: ",i+1);
scanf( "%d ",&b);
getchar ();
printf ( "%d ", b);
}

读书人网 >C语言

热点推荐