【发布时间】:2020-04-17 02:17:17
【问题描述】:
我正在阅读“Accelerated C++”一书,即使在我的机器上完全复制他们的代码后,我也无法重现他们阅读作业问题的结果。基本问题是关于使用 cin.clear() 改变使用EOF后输入流的失败状态以指示所有等级已输入。作者建议在 Linux 系统上使用 Ctrl+D 进行 EOF。我已经看到this 和this,但他们无法解决我的问题。
这是我的最小工作示例:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string name, city;
vector<double> homework;
cout << "Enter your name : " ;
cin >> name;
cout << "Hello " + name + "!" << endl;
cout << endl;
cout << "Enter your grades" << endl;
if (cin)
{
homework.clear();
double x;
while (cin >> x)
{
homework.push_back(x);
}
cin.clear();
}
cout << endl;
cout << "Enter your city : " ;
cin >> city ;
cout << "You live in " + city << endl;;
return 0;
}
输入完所有作业后,我按Ctrl+D,然后我希望我现在有机会输入城市名称。但是程序在我的代码末尾打印了两个字符串后才结束。我对cin.clear()的理解有什么问题?我还想指出,在cin.clear() 之后使用cin.ignore() 也无济于事。
【问题讨论】:
-
@SamVarshavchik 你能告诉我一个吗?我急需快速学习 C++。
-
你需要通过一些考试还是学习c++?此练习(或示例)是人为设计的,如果它引起麻烦,您不必使用 EOF 作为成绩的结尾。使用任何有效的方法,不断进步。
-
@ddbug 不是考试。我需要用 C++ 重写大量 fortran 遗留代码,而且我有大约 1 年的时间。
-
对不起,不知道有什么书可以立即提供帮助((恕我直言,问题是 EOF(Linux 中的 ctrl/D)呈现
cin不可用的 TL;DR。所以避免它。例如,指示用户输入 0 或负数作为成绩的结尾。然后继续阅读更多数据。首先使其工作,然后再进行外观改进。 -
@Peaceful 如果你想学习如何写作,现代的
C++使用 PluralSight 并参加 Kate Gregory 的任何课程