Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在while循环条件vs循环内部将char设置为file.get()_C++ - Fatal编程技术网

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;            
}