我有一个非常简单的问题......
#include<iostream>
using namespace std;
int main()
{
char x;
while(!cin.eof())
{
cin>>x;
cout<<"char: "<< x << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么当我尝试在Linux上运行此代码时:
./ file_name <test_file.txt
结果是:
char:一个
char:b
char:c
char:d
char:d
当test_file.txt仅为:
abcd
Che*_*Alf 10
输入操作失败会检测到文件结尾.
所以,在
cin>>x;
cout<<"char: "<< x << endl;
Run Code Online (Sandbox Code Playgroud)
即使输入操作失败,也会执行输出语句.
当它失败时,它不会更新x.
而不是测试.eof(),测试.fail().
您可以通过直接使用流对象作为条件来实现,例如
#include<iostream>
using namespace std;
int main()
{
char x;
while( cin >> x )
{
cout<<"char: "<< x << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
这里表达式cin >> x执行可能更新的输入操作x,并且其表达式结果返回对流的引用,即to cin.因此cin被直接用作条件.这将调用转换为布尔值,布尔值被定义为使其本身等效!cin.fail()(即,表达式cin >> x作为条件等同于写入!(cin >> x).fail()或作为逗号表达式(cin >> x, !cin.fail())).