第二个scanf为什么不能执行?
#include<stdio.h>int main()
{
int q;
char i;
printf("eee\n");
scanf("%d",&q);
printf("rrr\n");
scanf("%c",&i);
printf("%d",q);
getch();
}
scanf("%c",&i); 试试 把%c改为%s 樱花 发表于 2016-8-12 14:57
scanf("%c",&i); 试试 把%c改为%s
i 是字符,不是字符串 应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数 应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数 应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数 qwe1231069 发表于 2016-8-12 18:12
应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数
缓存怎么清除? 表示百度 去瞧瞧 发表于 2016-8-12 17:59
i 是字符,不是字符串
没办法了找大牛 可以在第一个scanf函数后面加一个getchar();#include<stdio.h>
int main()
{
int q;
char i;
printf("eee\n");
scanf("%d",&q);
getchar();
printf("rrr\n");
scanf("%c",&i);
printf("%d",q);
getch();
} 试试在第二个scanf后面加上fflush(stdin);清理缓冲区 我这里网速渣的要死
之前竟然连续发了三次一样的好丢人啊 ~.~
都在讨论什么。。
代码是没问题的。
我猜你是这样的:
假如输入:
123 a
那么q=123,c=空格。
q后面的空格会被c读入。
假如输入这样的:
123
a
那么q=123,c=换行'\n'。
123后面的换行被i读入。 你第一次输入完成之后会以回车结尾,那个回车就会存入缓冲区中,它也是一个字符,ASCLL码为10,所以这个也算是一个字符,如果你下一次输入的是字符型的数据,那么这个回车会跑到你的字符里面去的,正好你要输入的是一个字符型的数据,占用一个字节,拿了那个回车满了,所以不用你输入了。你需要清空缓冲区。代码就一句,如下
while(char c=getchar()!='\n');
楼上正解。 11楼正解
页:
[1]