C语言 输出结果空了很多行是怎么回事? 输入一些特殊符号,打印12个这样的符号,直到输入‘@’,结束程序

#include<stdio.h>int main(){ int i; char a; while(scanf("%c",&a)!=EOF) { if(a=='@') break; for(i=0;i<=11;i++) { printf("%c",a); } printf("\n"); }

}

第1个回答  2015-01-16
在while(scanf("%c",&a)!=EOF)中的%前加一个空格,写成while(scanf(" %c",&a)!=EOF)就行了。或在printf("\n");前加一句getchar();有同样的效果……追问

真的可以了!
能解释一下原理吗?为什么加个空格就可以了?谢谢!

追答

因为scanf("%c",&a)中的%c是指示函数接收一个字符,而'\n'也是字符,当你输入#后必然要回车,a接收了#,却把'\n'留在了输入缓冲区里;for输出12个#后,再次进入while循环,不等你输入什么,scanf("%c",&a)就把上次留在缓冲区里的'\n'赋给了a,然后再for循环输出12个'\n'——就是你看到的12个空行。加个空格后,由scanf函数的性质知,它要先接收一个“广义空格('\n'、'\t'、' '等)“后才等待键盘输入其他字符,这样那个空格刚好把上次留在输入缓冲区里的'\n'收走了,接下来就正常了。在printf("\n");前加一句getchar();是同样道理,就是要在下一次输入字符前把遗留在缓冲区里的'\n'让getchar();收走。

第2个回答  推荐于2016-08-03
for(i=0;i<=11;i++)
 {
  printf("%c",a);
 }

这一行代码会导致输出很多个重复的a。

要注意,如果你用

scanf("%c",&a);

这样的方式输入字符的话,会把回车那个字符也输入进去的。

导致回车当成了一个字符就换了很多行。


你可以先判断输入的字符等不等于回车,等就跳过。

追问

请问你的代码是怎么样能这样显示的,真好看,能告诉我吗?

追答

这是回答才有的。。。
提问者是没有的。。。

本回答被提问者和网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网