为什么在尝试读取数字和非数字混合输入时有些字符串会被截断,如下面的代码所示

Why are some strings cutoff when attempting to read a mixture of numeric and non-numeric input as in the following code?

本文关键字:数字 代码 读取 混合 为什么 输入 字符串      更新时间:2023-10-16

程序:

#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编译器。

我只能怀疑输入来自某个文件,该文件是使用文本编辑器准备的,该编辑器在文本中插入了一些控制符号。例如,您使用的文本编辑器似乎在文本中插入了退格字符。

使用不在文本中插入任何控制符号的文本编辑器

相关文章: