2013-09-19 3 views
0

Моего кода: http://pastebin.com/qjFd6KXbПроблем проверки за действительное CIN ввода

У меня есть задание для класса, который требует от меня, чтобы создать программу, которая будет выводить простой вопрос умножения, что пользователь должен ответить на три попытки или меньше. Одним из требований является то, что программа проверяет, что пользователи считают допустимым числом. Мой профессор хочет, чтобы мы использовали этот метод в нашем коде:

#include <iostream> 
#include <cstdio> 
using namespace std; 

int main() 
{ 
    char c; 
    bool valid = false; 
    int i; 
    while (!valid) 
    { 
     cout << "Enter an int " << endl; 
     cin >> i; 
     valid = true; 
     if (cin.peek() != '\n' || cin.fail()) // checks if the input data was correct or not 
     { 
      valid = false; 
      cin.clear(); // clears the error flags 
      cin.ignore(100, '\n'); // ignores up to 100 characters in the cin stream 
     } 
    } 
} 

Проблема возникает в строке 57 моего кода. Без дополнительного цикла while и инструкции для проверки правильности он работает нормально. Однако независимо от того, что я пытаюсь, когда я реализую эту часть, он либо становится бесконечным циклом, либо не может победить. Если кто-то может сообщить мне, что с этим не так, я бы очень признателен, потому что я не могу, чтобы жизнь меня показала.

+0

Я вижу только около 20 строк кода. Где линия 57? Вы упоминаете еще один цикл while, но я его не вижу. Проводка большего количества (или всего) кода может помочь нам в этом. – Casey

+0

'try = try + 1; // Добавляет его в счетчик попыток. Вы не говорите? Я думал, что он вычисляет e = mc2 :) Серьезно, ваш код завален бесполезными комментариями, которые являются просто шумом. – jrok

+0

Он/был, очевидно, новичком, Эйнштейн .. – displayname

ответ

1

Просто взял короткий взгляд на свой код .. Я думаю

tries = tries + 1; // Adds one to the tries counter 

находится в неправильном объеме

while ((choice != 1) || (choice != 1) || (choice != 1)); 
    cout << "Try to solve the problem!\n"; // Provides instruction to the user. 

    while ((result != guess) && (tries < maxtries)) 
    { 
    } 
    tries = tries + 1; // Adds one to the tries counter 
} 

должен быть

while (choice != 1); 
    cout << "Try to solve the problem!\n"; // Provides instruction to the user. 

    while ((result != guess) && (tries < maxtries)) 
    { 
      tries = tries + 1; // Adds one to the tries counter 
    } 
} 
+1

Да, я думаю, что это скорее проблема. – Chemistpp

+0

Это решило, спасибо! – user2795598

0

Ваш чек может быть достигнуто как это:

std::cin >> i; 
    while(std::cin.fail()) { 
     std::cout << "Bad Input\nEnter an Integer, foo: "; 
     std::cin.clear(); 
     std::cin.ignore('256','\n'); 
     std::cin >> i; 
    } 

Я не уверен, почему вы достигли пика и искали конец строки

Смежные вопросы