鱼C论坛

 找回密码
 立即注册
查看: 2265|回复: 8

[已解决]Linux 系统如何清空 stdin 缓冲区

[复制链接]
发表于 2022-11-29 15:23:30 | 显示全部楼层 |阅读模式

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

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

x
如题,网上的 fflush(stdin), cin.sync() 怎么都不管用

事情是这样的,我要做一个程序,程序中要求用户输入两行数字,格式就如这样:
a
b
但是,因为我担心用户第一行会不按要求输入很多数字,因此,我想在读入b 之前清空 stdin 缓冲区,我就这样做了:
...
int a, b;
scanf("%d", &a);
fflush(stdin);
scanf("%d", &b);
//对 a, b 进行若干操作...
但是,这个代码放在 windows 没有事,在 Linux 就出问题了

输入:
3 4444 4 2 3 3
8
windows 输出:
8
Linux 输出:
4444

很明显,fflush(stdin) 在 linux 系统中并不能清空 stdin 的缓冲区,网上搜的 cin.sync() 也不对,那么该到底怎么写呢
最佳答案
2022-11-29 15:33:45
#include <iostream>
#include <limits>

using std::cin, std::cout, std::endl;
using std::numeric_limits;
using std::streamsize;

int main() {
    char ch; cin >> ch;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin >> ch;
    cout << ch << endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-29 15:33:45 | 显示全部楼层    本楼为最佳答案   
#include <iostream>
#include <limits>

using std::cin, std::cout, std::endl;
using std::numeric_limits;
using std::streamsize;

int main() {
    char ch; cin >> ch;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin >> ch;
    cout << ch << endl;
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-29 15:34:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 15:35:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-29 15:36:30 | 显示全部楼层

换行之后就好像假死了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-29 15:37:53 | 显示全部楼层

马上,稍等,总感觉不对,我再调试调试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 15:39:01 | 显示全部楼层
sh-5.1$ uname -srmo
Linux 6.0.6-arch1-1 x86_64 GNU/Linux
sh-5.1$ cat main.cpp
#include <iostream>
#include <limits>

using std::cin, std::cout, std::endl;
using std::numeric_limits;
using std::streamsize;

int main() {
    char ch; cin >> ch;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin >> ch;
    cout << ch << endl;
    return 0;
}
sh-5.1$ g++ -g -Wall -o main main.cpp
sh-5.1$ ./main
1234
abcd
a
sh-5.1$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-29 15:40:08 | 显示全部楼层

不好意思,刚刚调试错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 15:40:40 | 显示全部楼层
zhangjinxuan 发表于 2022-11-29 15:37
马上,稍等,总感觉不对,我再调试调试

cin都清空了,第14行要求输入一个ch,你没有输入,当然就在那里一直等着了

评分

参与人数 1鱼币 +5 收起 理由
zhangjinxuan + 5 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 10:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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