C++ cin char逐符号读取

tuc*_*nak 10 c++ stream cin char

我需要按符号逐个阅读.但我不知道如何阅读直到输入结束.例如,测试系统将cin >> somecharvariable m次.我必须逐个符号地阅读所有字符.只有m次.我怎么能这样做?

Ker*_* SB 6

如果要逐个字符地格式化输入,请执行以下操作:

char c;
while (infile >> c)
{
  // process character c
}
Run Code Online (Sandbox Code Playgroud)

如果要读取原始字节,请执行以下操作:

char b;
while (infile.get(b))
// while(infile.read(&b, 1)   // alternative, compare and profile
{
  // process byte b
}
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,infile都应该是类型std::istream &或类似的,例如文件或std::cin.


Kon*_*lph 5

在您一次阅读一个字符之前,有几种方法可以一次阅读一个字符,但它们都不是最好的。

就个人而言,我将使用以下代码:

char c;
while (cin.get(c)) {
    // Process c here.
}
Run Code Online (Sandbox Code Playgroud)

如果只需要阅读m字符,请考虑使用for循环:

char c;
for (unsigned int i = 0; i < m && cin.get(c); ++i) {
    // Process c here.
}
Run Code Online (Sandbox Code Playgroud)

只要满足两个条件,就会运行该循环:(1)m读取的字符数少于(2)仍有要读取的字符。

但是,这两种解决方案都有一个缺点:它们效率相对较低。m一次性读取字符更有效。

因此,首先分配足够大的缓冲区来存储m字符,然后尝试读取它们:

std::vector<char> buffer(m);
cin.read(&m[0], m);
unsigned total_read = cin.gcount();
Run Code Online (Sandbox Code Playgroud)

注意最后一行–这将告诉您是否m已实际读取字符。