Проблема петли.Cin C ++ getline очистить буфер - PullRequest
0 голосов
/ 14 октября 2010

У меня проблема, но я не могу понять, что я делаю не так. Я не уверен, что это проблема с моим циклом, или буфер cin не очищается. Я делаю программу, которая преобразует строку в стиле C в верхний регистр, однако если пользователь вводит более 11 символов, то функция должна отображать только первые 11, а все, что после этого не должно отображаться. Проблема заключается в том, что если я введите более 11 символов, тогда мой цикл никогда не останавливается и продолжает сообщать пользователю, что введенный ответ недействителен и если он хотел бы ввести новую строку.

Ответы [ 4 ]

0 голосов
/ 14 октября 2010

Вы можете исправить свою программу, изменив свой cStringToUpper fn.что-то вроде:

...    
int loopCount;
char buffer[256];
cin.getline(buffer,256);
strncpy(letters, buffer, 11);
//letters[11]= '\0';
cout << "\n" << endl;
...
0 голосов
/ 14 октября 2010

Вы даете cin.getline длину буфера 12, так что потребуется только столько символов, остальные все еще находятся в буфере. Если вы вместо этого используете

 string str;
 cin.getline(str)

Тогда вы получите всю строку, затем вы можете обрезать ее до 11 символов. Не 100% синтаксиса cin, но вы поняли идею.

Или переместить часть игнорирования выше

cin >>cont;

чтобы игнорировать дополнительные символы таким образом.

0 голосов
/ 14 октября 2010
cin >> cont;
cout << "\n" << endl;
cin.ignore(200,'\n');

должно быть

cin.ignore(200,'\n');
cin >> cont;
cout << "\n" << endl;
0 голосов
/ 14 октября 2010

Проблема возникает, когда вы пытаетесь очистить буфер.Когда вы возвращаетесь из cStringToUpper, в вашем буфере все еще есть дополнительные символы, но вы сразу ищете y / q.

...