Linux 系统如何清空 stdin 缓冲区
如题,网上的 fflush(stdin), cin.sync() 怎么都不管用{:10_266:}事情是这样的,我要做一个程序,程序中要求用户输入两行数字,格式就如这样:
a
b
但是,因为我担心用户第一行会不按要求输入很多数字,因此,我想在读入b 之前清空 stdin 缓冲区,我就这样做了:
...
int a, b;
scanf("%d", &a);
fflush(stdin);
scanf("%d", &b);
//对 a, b 进行若干操作...
但是,这个代码放在 windows 没有事,在 Linux 就出问题了 {:10_282:}
输入:
3 4444 4 2 3 3
8
windows 输出:
8
Linux 输出:
4444
很明显,fflush(stdin) 在 linux 系统中并不能清空 stdin 的缓冲区,网上搜的 cin.sync() 也不对,那么该到底怎么写呢{:10_266:} #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;
}
人造人 发表于 2022-11-29 15:33
试过,错了{:10_266:} zhangjinxuan 发表于 2022-11-29 15:34
试过,错了
? 人造人 发表于 2022-11-29 15:35
?
换行之后就好像假死了{:10_250:} 人造人 发表于 2022-11-29 15:35
?
马上,稍等,总感觉不对{:10_277:},我再调试调试 zhangjinxuan 发表于 2022-11-29 15:34
试过,错了
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$
人造人 发表于 2022-11-29 15:39
不好意思,刚刚调试错了{:10_282:} zhangjinxuan 发表于 2022-11-29 15:37
马上,稍等,总感觉不对,我再调试调试
cin都清空了,第14行要求输入一个ch,你没有输入,当然就在那里一直等着了
页:
[1]