我需要逐个符号地阅读。但我不知道如何阅读直到输入结束。例如,测试系统将cin>> somecharvariable m次。我必须逐个符号地阅读所有字符。只有m次。我怎么能这样做?
答案 0 :(得分: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
。
答案 1 :(得分:4)
有几种方法可以一次读取一个字符,直到你完全阅读它们为止,并且它们都不是最好的。
就个人而言,我会使用以下代码:
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
个字符。
答案 2 :(得分: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;
}