C++ C++;逐符号读取字符
我需要一个符号一个符号地读。但直到输入结束我才知道如何阅读。例如,测试系统将cin>>某些变量m次。我必须一个符号一个符号地阅读所有字符。只有m次。我该怎么做?试试这个:C++ C++;逐符号读取字符,c++,stream,char,cin,C++,Stream,Char,Cin,我需要一个符号一个符号地读。但直到输入结束我才知道如何阅读。例如,测试系统将cin>>某些变量m次。我必须一个符号一个符号地阅读所有字符。只有m次。我该怎么做?试试这个: #include <iostream> using std::cin; using std::cout; int main(int argc, char *argv[]) { char ch; unsigned m = 10; while (cin && m--) {
#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;
}
#包括
使用std::cin;
使用std::cout;
int main(int argc,char*argv[])
{
char ch;
无符号m=10;
而(cin&m--){
cin.read(&ch,sizeof(ch));
cout有几种方法可以一次读一个字符,直到你全部读完为止,但没有一种方法一定是最好的
就个人而言,我会使用以下代码:
char c;
while (cin.get(c)) {
// Process c here.
}
如果只需要读取<代码> M< /COD>字符,请考虑使用<代码> < <代码>循环:
char c;
for (unsigned int i = 0; i < m && cin.get(c); ++i) {
// Process c here.
}
请注意最后一行–这将告诉您是否已实际读取了m
个字符。如果要逐个字符格式化输入,请执行以下操作:
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
}
如果要读取原始字节,请执行以下操作:
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
}
在这两种情况下,infle
应该是std::istream&
或类似的类型,例如文件或std::cin
尝试将其放入字符串中。您是在输入结束前读取m次,还是在读取m个符号?或者查看istream::get(char*buffer,size\t len,char delimiter)
和istream::read(字符*缓冲区,大小长度)
如果您想要所有字节,包括空格和换行符,为什么从char*
转换为char*
?此解决方案不读取m个符号,或者直到EOF,m次才重复读取。@TravisGockel没有理由这样做。修复:)此解决方案不读取m个符号或不重复读取until EOF,m次。+1用于更新,特别是在for
循环中覆盖EOF情况。对于读取原始字节(symbos),cin.read
方法通常效率更高,至少它使用更少的函数调用。@ThomasMatthews:谢谢,我也考虑过这一点——我添加了替代版本。