程序:
#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 100
摩尔75 85 77 59 0 85 75 89
诺曼57 78 73 66 78 70 88 89
西风43 98 96 79 100 82 97 96
爱德华兹77 72 73 80 90 93 75 90
富兰克林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
摩尔
•
西风
病房
ranklin
琼斯
rpenter
我开始阅读这本加速c++的书,并遇到了作者的一段代码(第4章),它在我的机器上没有像预期的那样工作(上面的示例是简短的,但遇到了与直接从书中获得的代码相同的问题)。目的是打印输入中代表学生成绩的数字行开头的所有名字。实际发生的情况是,一些名字是完整打印的,而另一些名字显然是随机的,从一开始就没有字母。我希望这里有人能解释一下为什么会发生这种情况。
我最初的想法是在到达非数字输入失败的过程中:
while (cin >> x);
不知何故超过了下一个名称的开头,但我在测试时遇到了困难,我不确定为什么会发生这种情况。
更新:似乎我遇到了同样的问题与mac的clang编译器。
我只能怀疑输入来自某个文件,该文件是使用文本编辑器准备的,该编辑器在文本中插入了一些控制符号。例如,您使用的文本编辑器似乎在文本中插入了退格字符。
使用不在文本中插入任何控制符号的文本编辑器