Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7

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

17.06.2010, 18:24. Показов 4072. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток!

Есть код, очень простенький. И есть баг: если пользователь вводит вместо цифр буквы или ещё какую-нить кракозябру, то программа выдаёт ошибку и завершается. Внимание, вопрос! Подскажите мне, балбесине, как бы НЕСЛОЖНО сделать так, чтобы в этом случае программа говорила что-нить типа "Неверный формат, повторить" и повторяла вопрос? Или в крайнем случае просто засчитывала ответ за неверный.
Спасибо любому кто откликнется дельным советом)))
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;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.06.2010, 18:24
Ответы с готовыми решениями:

Охота на ошибки, при неправильном вводе
В общем проблема такая. Если есть переменная типа int, а туда с клавы вводят какой-нибудь символ, то программе это не нравится и она...

Нужно сделать так чтобы при неправильном вводе программа не прекращала работу, а предлагала заново ввести значение N
Вот собственно сам код #include&lt;ctime&gt; #include&lt;iostream&gt; using namespace std; int N, action; int main() { ...

При неправильном вводе логина и пароля нехочит добавлять запись об этом в БД, где-то мелкая ошибка
Делаю проверку логина и пароля на сайте, всё работает, но если неправильно вводиш логин и пароль - ip-адрес юзера должен записываться в бд,...

9
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
17.06.2010, 18:51
все просто Проверка типа вводимой переменной
1
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
17.06.2010, 18:52
самый простой способ - char antwort.тогда будет
C++
1
if (Antwort == "391")
0
113 / 113 / 28
Регистрация: 05.07.2009
Сообщений: 225
17.06.2010, 18:57
А вот не самый простой и не самый красивый способ, реализована только проверка первого значения, дальше по аналогии.
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;
}
1
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7
19.06.2010, 23:00  [ТС]
Цитата Сообщение от Mur3ik Посмотреть сообщение
ррработает!) вот только после выдачи сообщения об ошибке переходит к следующему вопросу, а мне бы хотелось чтобы он предыдущий повторил... как бы это написать? пасииииииииибо)))

Добавлено через 6 минут
Цитата Сообщение от Vladimir616 Посмотреть сообщение
А вот не самый простой и не самый красивый способ, реализована только проверка первого значения, дальше по аналогии.
компилиццо, но так как надо не работает(
0
 Аватар для AnTro.Net
131 / 127 / 50
Регистрация: 28.04.2010
Сообщений: 928
19.06.2010, 23:15
научись пользоваться схемой try - catch
1
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7
19.06.2010, 23:34  [ТС]
Цитата Сообщение от AnTro.Net Посмотреть сообщение
научись пользоваться схемой try - catch
пошла читать)
0
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
20.06.2010, 01:24
Юлькo, прочитай тут про цикл ду-вайл там приводится пример который под твою задачу(повторный ввод неправильно введенного значения)-> Циклы в C / C++
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
20.06.2010, 05:56
Юльк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;
}
2
 Аватар для Юлькo
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 7
20.06.2010, 09:39  [ТС]
Урррррррррррра, заработало)))))))) счастью моему нет предела))))
в результате получилось вот так:
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 Посмотреть сообщение
Это ведь Ваша страница? Очень здорово, ясно и понятно объясняете, пасибо)
*пошла читать остальное *
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2010, 09:39
Помогаю со студенческими работами здесь

Вывод ошибки при неправильном вводе
Помогите пожалуйста, мне нужно чтобы к примеру при вводе первого числа 0 и второго 0, в конце выходила ошибка, чего у меня не происходит. ...

Цвет символов при неправильном вводе в едит
Здравствуйте! Подскажите, пожалуйста, как сделать так, чтоб когда вводишь в Edit (например в калькуляторе) буквы, они не брались в расчет,...

Блокировка формы при неправильном вводе пароля
Есть форма на которой вводится пароль, после успешного ввода открывается вторая форма. Как ограничить количество попыток ввода пароля?...

Как убрать вылетание при неправильном вводе в Edit
У меня в программе стоит кнопка которая присваивает переменной значение edit в значение integer, но когда вводишь допусти слова она...

Неполучается чтоб при неправильном вводе воводилась надпись ошибки.
&lt;form action=&quot;#&quot; method=&quot;post&quot;&gt; &lt;span style=&quot;background:#EDC3C3;color:Red&quot;&gt;&lt;?=@$e1;?&gt;&lt;/span&gt; Индекс:&lt;br&gt; &lt;input type=&quot;text&quot;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru