Почему некоторые строки обрезаются при попытке прочитать смесь числового и нечислового ввода, как в следующем коде?

Программа:

#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();
}
}

Входные данные:

Му 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

Выход:

мычание
Мур
Орман
западный
подопечные
ranklin
Джонс
rpenter

Я начал работать над книгой, ускоряющей C ++, и наткнулся на фрагмент кода авторов (глава 4), который не работал должным образом на моей машине (приведенный выше пример сокращен, но испытывает ту же проблему, что и код непосредственно из книги). Намерение состоит в том, чтобы напечатать все имена в начале строк чисел, представляющих оценки учащихся на входе. На самом деле происходит то, что некоторые имена печатаются полностью, в то время как другие, по-видимому, наугад, с самого начала пропускают буквы. Я надеялся, что кто-то здесь сможет пролить свет на то, почему это происходит.

Моя первоначальная мысль заключалась в том, что в процессе сбоя при достижении нечислового ввода строка:

 while (cin >> x);

что-то не соответствовало началу следующего имени, но я испытываю трудности с проверкой этого, и я не уверен, почему это должно произойти.

Обновление: кажется, я испытывал ту же проблему, что и этот вопрос с компилятором Clang для Mac.

2

Решение

я могу только подозревать, что ввод сделан из некоторого файла, который был подготовлен с использованием текстового редактора, который вставляет некоторые контрольные символы в текст. Например, кажется, что текстовый редактор, который вы использовали, вставляет символы возврата в текст.

Используйте текстовый редактор, который не вставляет никаких управляющих символов в текст.

0

Другие решения


По вопросам рекламы [email protected]