2013-08-01 2 views
0

Здравствуйте. У меня возникают проблемы с сборкой с куском кода, который я пытаюсь выполнить. Я новичок в C++, и я пытаюсь обойти его, поэтому проблема, вероятно, очень проста. Я бы очень признателен за то, что кто-то может дать мне руку. Вот код;C++: поиск и устранение неисправностей петли

#include <iostream> 
using namespace std; 

int i = 0; 
char input = ' '; 

int main() 
{ 
    for(i = 1; i <= 100; ++i) 
    { 
     if((cin >> input) == 'a') 
     { 
      break; 
     } 
    } 
    return 0; 
} 

Этот вопрос с "если ((CIN >> вход) == 'а')" есть что-то не так с оператором '=='

+0

Проблема в том, что '(cin >> input)' не возвращает то, что полезно сравнить с '' a''. – juanchopanza

+0

В этом нет ничего плохого. Вы сравниваете результат 'operator >>()' с ''a'', а не' input' с '' a'' – StoryTeller

+0

. Я уверен, что у вас есть что-то интересное в компиляторе. Может быть, вы могли бы начать здесь. – undu

ответ

7

вопрос у вас есть, что выражение cin >> input не «возврат», тип символов, он возвращает cin как istream& объекта.

Прямое исправление для вас будет:

if((cin >> input) && (input == 'a')) 
{ 
    break; 
} 

Причина проверки cin >> input оборонительный: если по какой-либо причине IStream не может читать, он становится недействительным.

На минорной ноте, петли в C++ обычно с нуля, и это лучше, чтобы ограничить сферу вашей i переменной:

for(int i = 0; i != 100; ++i) 
+0

Обычным условием для условия завершения является 'i <100'. –

+0

'! =' Работает как с итераторами, так и с индексами и накладывает определенную дисциплину на программирование диапазонов. На этом есть множество вещей, которые, увы, слишком много для комментариев ... http://www.jaggersoft.com/pubs/HowToWriteALoop.htm - хорошее начало. – SteveLove

+0

приветствует ребят за вашу помощь – user2099445

0

оператор >> Безразлично» t возвращает прочитанный символ, но ссылается на сам istream.

Вы должны сделать:

for(i = 1; i <= 100; ++i) { 
    cin >> input; 
    if (input == 'a') { 
     break; 
    } 
} 

Вы также можете сохранить состояние if (cin >> input), чтобы проверить, если ваш IStream еще в «хорошем состоянии», если он правильно прочитал, но я не могу видеть, как чтение char может заставить cin терпеть неудачу. Это во всяком случае хорошая практика во всех других случаях, когда вы должны читать из входного потока.

Также полезно использовать for(int i = 0; i < 100; ++i) вместо for(i = 1; i <= 100; ++i) (если, например, вы должны использовать i в качестве индекса для массива). Также обратите внимание, что вы не должны определять i вне цикла for: на C++ держите область переменной как можно более локальной, она защитит вас от многих копий ошибок &.

3

выражение (cin >> input) возвращает ссылку на cin, и это никогда не будет равно «a».

Изменение петли следующим образом:

for(i = 1; i <= 100; ++i) 
{ 
    cin >> input; 
    if(input == 'a') 
    { 
     break; 
    } 
} 
1

попробовать

for(i = 1; i <= 100; ++i) 
    { 
     cin >> input; 
     if(input == 'a') 
     { 
      break; 

     ... 

вместо этого. Iostream (cin) сохраняет вход во вход, когда theres a; или лицевая линия;)

0

Просто предложить другой метод для получения входных данных:

зОго :: GetLine() позволяет получить то, что было набрано пользователем, включая приговоры и в объекте строки. Таким образом, это решение имеет тенденцию быть более гибким.

string input; 
getline(cin, input); 
if(input == "a") 
{ 
    break; 
} 
Смежные вопросы