鱼C论坛

 找回密码
 立即注册
查看: 2263|回复: 15

第二个scanf为什么不能执行?

[复制链接]
发表于 2016-8-12 14:03:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-12 14:57:04 | 显示全部楼层
scanf("%c",&i);       试试 把%c  改为%s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-12 17:59:51 From FishC Mobile | 显示全部楼层
樱花 发表于 2016-8-12 14:57
scanf("%c",&i);       试试 把%c  改为%s

i 是字符,不是字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 18:12:53 | 显示全部楼层
应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 18:21:05 | 显示全部楼层
应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 18:23:05 | 显示全部楼层
应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-12 18:42:04 From FishC Mobile | 显示全部楼层
qwe1231069 发表于 2016-8-12 18:12
应该与缓存区有关
scanf函数输入字符后会保存在缓存区,你要把缓存清除再输入
或者换个函数

缓存怎么清除?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 19:30:12 | 显示全部楼层
表示百度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 19:46:09 | 显示全部楼层
去瞧瞧 发表于 2016-8-12 17:59
i 是字符,不是字符串


没办法了  找大牛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 20:00:55 From FishC Mobile | 显示全部楼层
试试在第二个scanf后面加上fflush(stdin);清理缓冲区
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 20:06:10 | 显示全部楼层
我这里网速渣的要死
之前竟然连续发了三次一样的好丢人啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-12 21:48:26 | 显示全部楼层
~.~
都在讨论什么。。
代码是没问题的。
我猜你是这样的:
假如输入:
123 a
那么q=123,c=空格。
q后面的空格会被c读入。
假如输入这样的:
123
a
那么q=123,c=换行'\n'。
123后面的换行被i读入。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-2 09:31:57 | 显示全部楼层
你第一次输入完成之后会以回车结尾,那个回车就会存入缓冲区中,它也是一个字符,ASCLL码为10,所以这个也算是一个字符,如果你下一次输入的是字符型的数据,那么这个回车会跑到你的字符里面去的,正好你要输入的是一个字符型的数据,占用一个字节,拿了那个回车满了,所以不用你输入了。你需要清空缓冲区。代码就一句,如下
while(char c=getchar()!='\n');
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2016-9-2 21:26:16 | 显示全部楼层
楼上正解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 13:37:47 | 显示全部楼层
11楼正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表