去瞧瞧 发表于 2016-8-12 14:03:02

第二个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();
}

樱花 发表于 2016-8-12 14:57:04

scanf("%c",&i);       试试 把%c改为%s

去瞧瞧 发表于 2016-8-12 17:59:51

樱花 发表于 2016-8-12 14:57
scanf("%c",&i);       试试 把%c改为%s

i 是字符,不是字符串

qwe1231069 发表于 2016-8-12 18:12:53

应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数

qwe1231069 发表于 2016-8-12 18:21:05

应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数

qwe1231069 发表于 2016-8-12 18:23:05

应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数

去瞧瞧 发表于 2016-8-12 18:42:04

qwe1231069 发表于 2016-8-12 18:12
应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数

缓存怎么清除?

qwe1231069 发表于 2016-8-12 19:30:12

表示百度

樱花 发表于 2016-8-12 19:46:09

去瞧瞧 发表于 2016-8-12 17:59
i 是字符,不是字符串

没办法了找大牛

轮回的夏 发表于 2016-8-12 19:56:55

可以在第一个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();
}

无符号整形 发表于 2016-8-12 20:00:55

试试在第二个scanf后面加上fflush(stdin);清理缓冲区

qwe1231069 发表于 2016-8-12 20:06:10

我这里网速渣的要死
之前竟然连续发了三次一样的好丢人啊

vcvycy 发表于 2016-8-12 21:48:26

~.~
都在讨论什么。。
代码是没问题的。
我猜你是这样的:
假如输入:
123 a
那么q=123,c=空格。
q后面的空格会被c读入。
假如输入这样的:
123
a
那么q=123,c=换行'\n'。
123后面的换行被i读入。

1366627538 发表于 2016-9-2 09:31:57

你第一次输入完成之后会以回车结尾,那个回车就会存入缓冲区中,它也是一个字符,ASCLL码为10,所以这个也算是一个字符,如果你下一次输入的是字符型的数据,那么这个回车会跑到你的字符里面去的,正好你要输入的是一个字符型的数据,占用一个字节,拿了那个回车满了,所以不用你输入了。你需要清空缓冲区。代码就一句,如下

while(char c=getchar()!='\n');

iszhuangsha 发表于 2016-9-2 21:26:16

楼上正解。

colinscq 发表于 2016-9-3 13:37:47

11楼正解
页: [1]
查看完整版本: 第二个scanf为什么不能执行?