C++ 在while循环条件vs循环内部将char设置为file.get()
我遗漏了打开文件的代码。第一条注释:返回一个C++ 在while循环条件vs循环内部将char设置为file.get(),c++,C++,我遗漏了打开文件的代码。第一条注释:返回一个int。将其值放入字符中是个好主意吗 回到你的问题上来:两个版本都是错误的 第一个版本尝试读取一个字节,将get()的返回值放入c,然后检查放入c的值是否不同于零,如果是,则检查流是否有效。为什么要检查字节是否与零不同 第二个版本同样糟糕:它检查前一次读取是否正常,然后读取数据,然后使用数据遗忘来检查当前读取是否成功 如果你开始使用这种语言,把所有的东西都说清楚,那么试着制作更简洁的版本。伪代码: fstream fin; char c; whi
int
。将其值放入字符中是个好主意吗
回到你的问题上来:两个版本都是错误的
第一个版本尝试读取一个字节,将get()
的返回值放入c
,然后检查放入c
的值是否不同于零,如果是,则检查流是否有效。为什么要检查字节是否与零不同
第二个版本同样糟糕:它检查前一次读取是否正常,然后读取数据,然后使用数据遗忘来检查当前读取是否成功
如果你开始使用这种语言,把所有的东西都说清楚,那么试着制作更简洁的版本。伪代码:
fstream fin;
char c;
while(fin) {
c = fin.get();
std::cout << c;
}
C++版本:
begin loop
try to read data
did the read fail? Then exit loop
use the data
end loop
while(true){
char c=fin.get();
如果(!fin)
打破
std::cout get函数的第一行说它读取一个字符并返回它(如果可用)。我不明白你说它返回int是什么意思,请澄清。@Omar,你可以看到定义是int\u type get();
,这意味着返回类型是int
。而不是char。基本上,这是为了在读取127以上的值时避免获取负值,并将EOF与值255区分开来。因此(while(fin.get(c))
的确切含义是什么?这是否意味着如果有一个字符需要阅读,那么就不能阅读该字符?@Omar基本上你的理解是正确的。我编辑了答案以进一步澄清它。记住,如果答案正确,就接受它,并解决你的问题。
begin loop
try to read data
did the read fail? Then exit loop
use the data
end loop
while (true) {
char c = fin.get();
if (!fin)
break;
std::cout << c;
}
char c;
while (fin.get(c)) {
std::cout << c;
}