C ++ cin char逐符号读取

问题描述 投票:10回答:3

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

c++ stream char cin
3个回答
6
投票

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

char c;
while (infile >> c)
{
  // process character c
}

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

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

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


5
投票

有几种方法可以一次读取一个字符,直到您全部读取它们,并且它们都不一定是最好的。

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

char c;
while (cin.get(c)) {
    // Process c here.
}

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

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

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

然而,两种解决方案都有一个缺点:它们的效率相对较低。一次性阅读m字符效率更高。

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

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

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


0
投票

试试这个:

#include <iostream>
using std::cin;
using std::cout;

int main(int argc, char *argv[])
{
    char ch;
    unsigned m = 10;
    while (cin && m--) {
        cin.read(&ch, sizeof(ch));
        cout << ch;
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.