我想在C++中读取一些多个字符,但它永远不会读取第二个字符
I want to read some multiple chars in C++ but it never reads the second char
我想简单地读取两个字符C++但它不能接受第二个字符!!
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
cout << "reading char: ";
char ch1;
cin.get(ch1);
cout << ch1 << endl;
char ch2;
cout << "reading char: ";
cin.get(ch2);
cout << ch2 << endl;
return 0;
}
谁能帮我解决这个问题?
这是输出:
reading char: a
a
reading char:
Process returned 0 (0x0) execution time : 2.158 s
Press any key to continue.
*************************
程序到此结束,并且不会读取第二个字符
这里的问题是标准输入(std::cin
(是缓冲的。因此,在按下<return>
键(或填充缓冲区(之前,程序不会获得任何输入。这给您的印象是代码将始终等待用户输入。
这不是真的。仅当当前缓冲区为空时,它才会等待用户输入。如果缓冲区中有数据,它将读取该数据,而不是等待用户输入。
第一条内容如下:
cin.get(ch1);
程序启动,因此缓冲区为空。因此,当您从std::cin
读取时,程序将暂停等待刷新缓冲区,然后读取字符。如果点击A<return>
缓冲区将刷新缓冲区中的两个字符。
Buffer: 'A' 'n'
读取现在将从输入中检索第一个字符:'A'
将'n'
留在输入流上:
Buffer: 'n'
现在,第二次读取看到缓冲区不为空。
cin.get(ch2);
并且不需要等待,它将从流中读取下一个字符。因此,它会从流中读取'n'
字符。并继续。
解决 方案:
这取决于你想要什么。你只想要行中的第一个字符吗?
std::cin.ignore(); // drops the rest of the line.
// The next character that will be available will
// be the first character of the next line.
您只想忽略空格?(这是空格/制表符/换行符等(。
std::cin >> v1 >> v2;
使用operator>>
将忽略前导空格,然后读取下一个值。所以它将忽略新行(它们是空格(。
您在这里的问题是get
只从流中抓取一个字符。 当您通过键入字符并按 Enter 为第一个输入输入字符时,您实际上将两个字符放入流中。 您输入然后输入键(换行符(的那个。 这意味着您对get
的第二次调用将获得仍在缓冲区中的换行符,而不是等待您输入任何内容。 要解决此问题,您应该使用流提取运算符 (operator >>
( 读取单个字符,它将跳过缓冲区中剩余的空格。 这会将您的代码变成
int main()
{
cout << "reading char: ";
char ch1;
cin >> ch1;
cout << ch1 << endl;
char ch2;
cout << "reading char: ";
cin >> ch2;
cout << ch2 << endl;
return 0;
}
如果输入第一个字符并按回车键,则换行符 (ASCII 10( 将由第二个 get(( 调用读取。
问题是,当您输入字符然后按回车键时,您将在控制台中输入换行符。因此,对cin.get()
的调用将换行符返回到ch2
,然后程序会打印出ch1
和ch2
的空白换行符并退出。
与其使用cin.get()
不如使用cin >> ch1
和cin >> ch2
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 从矢量C++读取字符时出现问题
- 从格式化输入操作中获取读取字符数
- 使用 cin.get 读取字符数组
- 按下回车键时,如何使数组停止读取字符
- C++:读取字符是不正确的
- 如何从输入文件中读取字符并将其存储到向量中?
- 线程函数无法从堆上分配的缓冲区中读取字符
- 使用 cin.get() 读取字符
- C++:使用 fgets() 读取字符输入时出错
- C++ 从文件中读取字符,计算每个字符并进行排序
- C ++ ifstream 无法读取字符串,并且在读取字符时出错
- 逐字读取字符数组,无需字符串函数
- 是否有任何方法可以在用户输入文本时读取字符
- 从字符串中读取字符时出错
- 如何按字符从文件到2D数组读取字符
- 重载>>运算符和读取字符
- 从堆栈中读取字符后,如何修复不正确的文件输出
- 如何从文件中读取“”字符
- 读取字符 * 始终具有相同的地址