作者在 2011-08-31 16:13:47 发布以下内容
# include <stdio.h>
void main()
{
int n;
scanf("%d\n",&n);
printf("you typed %d\n",n);
}
以上的代码要怎么样输入?void main()
{
int n;
scanf("%d\n",&n);
printf("you typed %d\n",n);
}
原因:
\n在scanf格式串中不表示等待换行符,而是读取并放弃连续的空白字符。(事实上,scanf格式串中的任何空白字符都表示读取并放弃空白字符。而且,诸如%d这样的格式也会丢掉前边的空白,因此你通常根本不需要在scanf格式串中加入显式的空白。)
因此,“%d\n”中的\n会让scanf读取到非空白字符串为止,而它可能需要读到下一行才能找到这个非空白字符串。这种情况下,去掉\n仅仅使用“%d”即可(但你的程序可能需要跳过那个没有读入的换行符。)
参考:《你必须找到的495个C语言问题》
——Steve Summit著
——孙云,朱群英 译
——人民邮政出版社
因此,“%d\n”中的\n会让scanf读取到非空白字符串为止,而它可能需要读到下一行才能找到这个非空白字符串。这种情况下,去掉\n仅仅使用“%d”即可(但你的程序可能需要跳过那个没有读入的换行符。)
参考:《你必须找到的495个C语言问题》
——Steve Summit著
——孙云,朱群英 译
——人民邮政出版社
思考下面问题:
# include <stdio.h>
void main()
{
int n,m;
scanf("%d-%d\n",&n,&m);
printf("you typed %d\n",n);
printf("you typed %d\n",m);
}
怎么输入?输出什么,是不是和自己预想的一样?void main()
{
int n,m;
scanf("%d-%d\n",&n,&m);
printf("you typed %d\n",n);
printf("you typed %d\n",m);
}