为了账号安全,请及时绑定邮箱和手机立即绑定

为什么getchar()不等我在scanf()后按Enter键?

为什么getchar()不等我在scanf()后按Enter键?

C
交互式爱情 2019-07-25 09:25:37
为什么getchar()不等我在scanf()后按Enter键?我正在学习C并且我正在使用“getchar()”来停止命令窗口,所以我可以看到练习正在进行但它只是不起作用。下面是一个样本:#include <stdio.h>int main(){     int value;     printf("1. option 1.\n2. option 2.\n3. option 3.\n4. Exit\n\nMake an option: ");     scanf("%d", &value);     switch (value)     {         case 1:             printf("you selected the option 1.");             break;         case 2:             printf("you selected the option 2.");             break;         case 3:             printf("you selected the option 3.");             break;         case 4:             printf("goodbye");             break;         default:             printf("thats not an option");             break;     }     getchar();     return 0;}这是输出:选项1。选项2。选项3。出口。做出选择:1您选择了选项1。进程返回0(0x0)执行时间:3.453秒按任意键继续。为什么不等待“getchar()”的输入?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

首先,千万不能使用fflush()来清除输入流; 行为未定义:

7.19.5.2.2如果流指向未输入最近操作的输出流或更新流,则fflush功能会将该流的任何未写入数据传送到主机环境以写入该文件; 否则,行为未定义。

问题是“%d”转换说明符没有使用尾随换行符,因此它会立即被拾取getchar()。没有一种最好的方法可以解决这个问题,但通常的方法是将整行读取为文本(使用fgets()scanf()使用大小的“%s”转换说明符),这将使用换行符,然后转换为目标数据类型使用sscanf()strtol()strtod()


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 547 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信