Форум программистов, компьютерный форум CyberForum.ru

ошибка при вводе в неправильном формате - C++

Восстановить пароль Регистрация
 
Юлькo
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7
17.06.2010, 18:24     ошибка при вводе в неправильном формате #1
Доброго всем времени суток!

Есть код, очень простенький. И есть баг: если пользователь вводит вместо цифр буквы или ещё какую-нить кракозябру, то программа выдаёт ошибку и завершается. Внимание, вопрос! Подскажите мне, балбесине, как бы НЕСЛОЖНО сделать так, чтобы в этом случае программа говорила что-нить типа "Неверный формат, повторить" и повторяла вопрос? Или в крайнем случае просто засчитывала ответ за неверный.
Спасибо любому кто откликнется дельным советом)))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
using namespace std;
int main()
{
    cout<<"Bitte loesen Sie folgende Aufgaben: "<<endl; //Пазязя, решите след. примеры
    cout<<"\n";
    
    int Antwort;
    int testscore = 0;
    
    cout<<"319 + 72 = ";
    cin>>Antwort;
    if (Antwort == 391)
    { 
         testscore++;
        }
    else
        {
         cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:"; //Ответ нэвэрный, следующий.
        }   
    cout<<"\n";
    
    cout<<"125 : 5 = ";
    cin>>Antwort;
    if (Antwort == 25)
        { 
     testscore++;
        }
    else
        {
         cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:";
        }   
    cout<<"\n";
    
    cout<<"(315 - 26) * 3 = ";
    cin>>Antwort;
    if (Antwort == 867)
        { 
     testscore++;
        }
    else
        {
         cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:";
        }   
    cout<<"\n";
    
    
    cout<<"\a";
    cout<<"\n"<<"\n"<<"\n";
 
    if (testscore == 0)
       {
        cout<<testscore<<" Punkte: Du bist ein Loser !!!";
       }
    else if (testscore == 1)
       {
        cout<<testscore<<" Punkt: Du kannst ja gar nichts...";
       }
    else if (testscore == 2)
       {
        cout<<testscore<<" Punkte: Du musst mal Mathe ueben, mein Freund.";
       }
    else if (testscore == 3)
       {
        cout<<testscore<<" Punkte: Grundschulniveau.";
       }
 
    cout<<"\n";
    cout<<"\n";
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2010, 18:24     ошибка при вводе в неправильном формате
Посмотрите здесь:

Ошибка при вводе даных в файл C++
C++ Ошибка при вводе
Ошибка при вводе матрицы. C++
Ошибка при вводе строки ! C++
C++ Охота на ошибки, при неправильном вводе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
17.06.2010, 18:51     ошибка при вводе в неправильном формате #2
все просто Проверка типа вводимой переменной
Artishok
ЧакЭ одобряЭ
 Аватар для Artishok
277 / 276 / 32
Регистрация: 27.12.2009
Сообщений: 1,767
17.06.2010, 18:52     ошибка при вводе в неправильном формате #3
самый простой способ - char antwort.тогда будет
C++
1
if (Antwort == "391")
Vladimir616
110 / 110 / 3
Регистрация: 05.07.2009
Сообщений: 224
17.06.2010, 18:57     ошибка при вводе в неправильном формате #4
А вот не самый простой и не самый красивый способ, реализована только проверка первого значения, дальше по аналогии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    cout<<"Bitte loesen Sie folgende Aufgaben: "<<endl; //Пазязя, решите след. примеры
    cout<<"\n";
    int Antwort;
    int testscore = 0;
    while(true)
    {
        cout<<"319 + 72 = ";
        cin >> Antwort;
        if(Antwort < -100000)
        {
            cout << "Ду бист зер шлэхтэс мэтхэн!" << endl;
            Antwort = -1000000;
            cin.clear();
            cin.ignore(1024, '\n');
            continue;
        }
        if (Antwort == 391)
            { 
             testscore++;
            }
        else
            {
             cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:"; //Ответ нэвэрный, следующий.
            }   
        cout<<"\n";
        break;
    }
    cout<<"125 : 5 = ";
    cin>>Antwort;
    if (Antwort == 25)
        { 
         testscore++;
        }
    else
        {
         cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:";
        }   
    cout<<"\n";
    
    cout<<"(315 - 26) * 3 = ";
    cin>>Antwort;
    if (Antwort == 867)
        { 
         testscore++;
        }
    else
        {
         cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:";
        }   
    cout<<"\n";
    
    
    cout<<"\a";
    cout<<"\n"<<"\n"<<"\n";
 
    if (testscore == 0)
           {
        cout<<testscore<<" Punkte: Du bist ein Loser !!!";
           }
    else if (testscore == 1)
           {
            cout<<testscore<<" Punkt: Du kannst ja gar nichts...";
       }
    else if (testscore == 2)
       {
            cout<<testscore<<" Punkte: Du musst mal Mathe ueben, mein Freund.";
       }
    else if (testscore == 3)
       {
            cout<<testscore<<" Punkte: Grundschulniveau.";
       }
 
    cout<<"\n";
    cout<<"\n";
    system("pause");
    return 0;
}
Юлькo
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7
19.06.2010, 23:00  [ТС]     ошибка при вводе в неправильном формате #5
Цитата Сообщение от Mur3ik Посмотреть сообщение
ррработает!) вот только после выдачи сообщения об ошибке переходит к следующему вопросу, а мне бы хотелось чтобы он предыдущий повторил... как бы это написать? пасииииииииибо)))

Добавлено через 6 минут
Цитата Сообщение от Vladimir616 Посмотреть сообщение
А вот не самый простой и не самый красивый способ, реализована только проверка первого значения, дальше по аналогии.
компилиццо, но так как надо не работает(
AnTro.Net
 Аватар для AnTro.Net
131 / 127 / 16
Регистрация: 28.04.2010
Сообщений: 930
19.06.2010, 23:15     ошибка при вводе в неправильном формате #6
научись пользоваться схемой try - catch
Юлькo
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7
19.06.2010, 23:34  [ТС]     ошибка при вводе в неправильном формате #7
Цитата Сообщение от AnTro.Net Посмотреть сообщение
научись пользоваться схемой try - catch
пошла читать)
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
20.06.2010, 01:24     ошибка при вводе в неправильном формате #8
Юлькo, прочитай тут про цикл ду-вайл там приводится пример который под твою задачу(повторный ввод неправильно введенного значения)-> Циклы в C / C++
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.06.2010, 05:56     ошибка при вводе в неправильном формате #9
Юлькo, вот Вам проверка ввода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <limits>
 
int main(){
    int i = 0;
    bool correct = false;
    std::cin.exceptions(std::cin.failbit);
    
    while ( ! correct ) {
        try {
            std::cout << "Enter value: ";
            std::cin >> i;
            if ( ! ( correct = ( std::cin.get() == '\n' ) ) )
                throw ( std::string("Digits are admissible only!") );
        }
        catch ( std::ios_base::failure & ) {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cerr << "Wrong input!" << std::endl;
        }
        catch ( const std::string & s ) {
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cerr << s << std::endl;
        }
    }
    
    std::cout << "You have entered " << i << std::endl;
    
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2010, 09:39     ошибка при вводе в неправильном формате
Еще ссылки по теме:

ошибка при вводе елементов C++
C++ Ошибка при вводе числа
Непонятная ошибка при вводе C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Юлькo
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7
20.06.2010, 09:39  [ТС]     ошибка при вводе в неправильном формате #10
Урррррррррррра, заработало)))))))) счастью моему нет предела))))
в результате получилось вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    
    int Antwort;
    int testscore = 0;
    int zaehler = 0;
    
    do
    {
    cout<<endl<<"319 + 72 = ";
    cin>>Antwort;
    if (Antwort == 391)
        { 
         testscore++; 
         zaehler++; 
        }
    else if (!cin) 
        {
         cout << "Das war leider keine Zahl!" << endl;
         cin.clear();
         fflush(stdin);
        }
    else 
        {
         cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:"<<endl;
         zaehler++;
        }   
    }
    while (zaehler<1);
    
    do
    {
    cout<<endl<<"125 : 5 = ";
    cin>>Antwort;
    if (Antwort == 25)
        { 
         testscore++;
         zaehler++;
        }
    else if (!cin) 
        {
         cout << "Das war leider keine Zahl!" << endl;
         cin.clear();
         fflush(stdin);
        }
    else
        {
         cout<<"Die Antwort war leider falsch! Auf zur naechsten Aufgabe:"<<endl;
         zaehler++;
        }   
    }
    while (zaehler<2);
Добавлено через 3 минуты
Mur3ik, спасибо Вам огромное за
Цитата Сообщение от Mur3ik Посмотреть сообщение
Это ведь Ваша страница? Очень здорово, ясно и понятно объясняете, пасибо)
*пошла читать остальное *
Yandex
Объявления
20.06.2010, 09:39     ошибка при вводе в неправильном формате
Ответ Создать тему
Опции темы

Текущее время: 09:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru