#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);
}
{
printf("%c",a);
}
这一行代码会导致输出很多个重复的a。
要注意,如果你用
scanf("%c",&a);这样的方式输入字符的话,会把回车那个字符也输入进去的。
导致回车当成了一个字符就换了很多行。
你可以先判断输入的字符等不等于回车,等就跳过。
追问请问你的代码是怎么样能这样显示的,真好看,能告诉我吗?
追答这是回答才有的。。。
提问者是没有的。。。