如何处理从cin中读取的多余字符?
How do I handle excess characters read from cin?
在下面的代码中,当我运行它时,如果我在运行时输入超过30个字符,它根本不会读取linesNum1
或text[]
。
所以我认为它存储了array1[30]
的额外字符,并在linesNum1
中使用它。
那么我如何清除程序的缓存,或者即使我输入的字符多于array1
可以容纳的字符,也可以将其变为cin
、linesNum1
和text[]
?
char array1[30];
for (int i = 0; i<30; i++)
cin >> array1[i];
int linesNum1;
cin >> linesNum1;
int linesNum2 = linesNum1*80;
char text[linesNum2];
for (int i = 0; i < linesNum2; i++)
cin >> text[i];
for (int i = 0; i < linesNum2; i++)
cout << text[i];
我相信你正在寻找的是std::cin.ignore(INT_MAX);
。
这将读入并忽略所有内容,直到EOF。此外,在此之前,您很可能也想执行std::cin.clear();
来重置流。
除了cin之外,ignore()是要添加的第二个可选参数:
std::cin.ignore(INT_MAX,'n');
将忽略,直到行尾
您需要刷新stdin
缓冲区,以摆脱可能的额外字符。
您可以使用istream::ignore
来丢弃流中所有可用的字符:
//Will discard everything until it reaches EOF.
cin.ignore(numeric_limits<streamsize>::max());
//Will discard everything until it reaches a new line.
cin.ignore(numeric_limits<streamsize>::max(), 'n');
的例子:
/* read 30 chars */
for (int i = 0; i<30; i++) cin >> array1[i];
/* discard all extra chars on the line */
cin.ignore(numeric_limits<streamsize>::max(), 'n');
/* clear the stream state flags */
cin.clear();
cin >> linesNum1;
...
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 从文件中读取行 - 删除多余的空格
- 如何处理从cin中读取的多余字符?