程序:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main(){
double x;
string name;
while(cin >> name){
cout<<name<<endl;
while (cin >> x);
cin.clear();
}
}
输入:
Moo 100 100 100 100 100 100 100 100
Moore 75 85 77 59 0 85 75 89
Norman 57 78 73 66 78 70 88 89
Westerly 43 98 96 79 100 82 97 96
Edwards 77 72 73 80 90 93 75 90
Franklin 47 70 82 73 50 87 73 71
琼斯 77 82 83 50 10 88 65 80
木匠 47 90 92 73 100 87 93 91
输出:
Moo
Moore
orman
Westerly
wards
ranklin
Jones
renter
我开始阅读这本书加速 C++ 并遇到了一段作者代码(第 4 章),它在我的机器上没有按预期工作(上面的示例是缩写的,但遇到了与书中直接代码相同的问题)。目的是打印输入中代表学生成绩的数字行开头的所有名称。实际发生的情况是,有些名字是完整打印的,而另一些名字显然是随机的,从一开始就缺少字母。我希望这里有人可以解释为什么会这样。
我最初的想法是,在未能达到非数字输入的过程中,该行:
while (cin >> x);
不知何故超过了下一个名字的开头,但我很难测试这个,我不确定为什么会发生这种情况。
更新:似乎我在使用 mac 的 clang 编译器时遇到了与这个问题相同的问题。