Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 80
1

Как организовать повтор ввода при неправильном ответе

14.11.2015, 21:03. Показов 5741. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, форумчане!
Пытаюсь сделать в консоли программку - квест. Пользователь вводит правильный ответ, и программа продолжает действовать. Для этого использую два рядка - один уже заполненый, а второй сравниваю с первым через strcmp, если результат - не 0, то ошибка, если 0 - то переходим к следующему вопросу.
Вопрос такой - как отменить переход к следующему вопросу, если на предыдущий дан неправильный ответ?
Пробовал через do while - не получилось, пробовал использовать goto (знаю что лучше не использовать). Если написан один вопрос - не пускает, пока не напишешь правильный ответ, а если два - то вообще не пускает. Подскажите, пожалуйста, что я делаю не так.
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
#include <iostream.h>
#include <conio.h>
 
char str1[10], str3[11], str5[12];
const char str2[10]="0000000000";
const char str4[11]="00554466338";
const char str6[12]="886785657687";
int strcmp (char*str1, char*str2);
int strcmp (char*str3, char*str4);
int strcmp (char*str5, char*str6);
void main ()
{
cout<<"Sdelay toto i toto. Otvet 1: ";
ert:
cin>>str1;
if (strcmp(str1,str2)!=0)
{cout<<"He-a\n";
goto ert;
}
else {
cout<<"2 otvet: ";
ert1:
cin>>str3;
if (strcmp(str3,str4)!=0)
{cout<<"He-a\n";
goto ert1;
}
else {
cout<<"3 otvet: ";
ert2:
cin>>str5;
if (strcmp(str5,str6)!=0)
{cout<<"He-a\n";
goto ert2;
}
else {
cout<<"You won!";
}
}
}
system ("pause");
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2015, 21:03
Ответы с готовыми решениями:

Как сделать так, чтобы консоль при неправильном ответе закрывалась?
Здравствуйте. Пишу консольную игру &quot;Кто хочет стать миллионером&quot;. И у меня вопрос: как сделать так,...

как организовать повтор ввода данных
Как на примере этого кода сделать возврат к воду чисел а при нажатие esc или же ctrl+z - выходило с...

Организовать повтор ввода при нажатии Enter
такой вот у меня вопрос: как сделать, чтоб после нажатия enter выполнение моей программы не...

Вычитание времени при неправильном ответе
Как в этом коде сделать, чтобы при выборе RadioButton отнималось от этих 15 секунд 5? private...

9
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
14.11.2015, 21:09 2
Используйте break чтобы остановить, continue чтобы продолжить. Подробнее здесь: Оператор break
0
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 80
14.11.2015, 21:11  [ТС] 3
А разве
Цитата Сообщение от Aymurat Посмотреть сообщение
break чтобы остановить, continue чтобы продолжить
это не для цикла?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
14.11.2015, 21:25 4
C++
1
2
3
4
5
6
cin>>str1;
while(strcmp(str1,str2)!=0)
{
    cout<<"He-a\n";
    cin>>str1;
}
0
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 80
14.11.2015, 21:36  [ТС] 5
zss, спасибо!!!

Добавлено через 9 минут
zss, странно, ввожу второй рядок такой же как и первый - все равно выдает
C++
1
Не-а
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
14.11.2015, 21:57 6
Значит чем-то они отличаются, иначе strcmp(str1,str2)!=0 было бы ложью
Посмотрите отладчиком
https://www.cyberforum.ru/cpp-... 62479.html
Может Вы вводите пробельные символы?
0
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 80
14.11.2015, 22:12  [ТС] 7
Нет, пробелы не ввожу. Отладчик показал вот это (если я правильно понял что делать):
Миниатюры
Как организовать повтор ввода при неправильном ответе  
0
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 80
14.11.2015, 22:53  [ТС] 8
А есть ещё какие-то способы сравнить рядок?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
15.11.2015, 13:54 9
Лучший ответ Сообщение было отмечено Nazar25 как решение

Решение

Цитата Сообщение от Nazar25 Посмотреть сообщение
Отладчик показал вот это
Надо в этом месте посмотреть не это, а значение переменных str1 и str2 и убедиться, что они действительно разные.

Кстати, зачем 3 объявления одной и той же функции:
Цитата Сообщение от Nazar25 Посмотреть сообщение
int strcmp (char*str1, char*str2);
int strcmp (char*str3, char*str4);
int strcmp (char*str5, char*str6);
И зачем Вы вообще это сделали?
strcmp объявлена в string.h
Вот его и надо подключить.

Еще одна ошибка
Цитата Сообщение от Nazar25 Посмотреть сообщение
const char str2[10]="0000000000";
Почему размер str1 указан 10, когда надо 11: 10 символов+терминальный ноль.
Скорее всего, из-за этого и получается, что переменные разные, т.к. изменение одной переменной приводит к изменению другой.
1
0 / 0 / 0
Регистрация: 06.12.2014
Сообщений: 80
15.11.2015, 14:25  [ТС] 10
zss, спасибо, вы очень помогли. Удалил три объявления функции, увеличил на один кол-во элементов рядка - и сработало!
0
15.11.2015, 14:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2015, 14:25
Помогаю со студенческими работами здесь

Запрос ввода числа. При вводе текста - повтор запроса. Как осуществить?
Необходимо осуществить проверку вводимых данных. Допустим мне нужно от пользователя чтоб он ввел...

Как организовать повтор программы?
Здравствуйте)) 1. Подскажите пожалуйста, как организовать запрет на ввод букв и знаков. То...

Плеер: как организовать повтор одной песни, всех песен, случайно
Доброго времени суток! Подскажите пожалуйста, как организовать повторы: одной песни, всех песен,...

Реализовать повтор ввода данных в программу или отказ от ввода
Программа должна вычислять произведение двух чисел и спрашивать завершать программу или нет, если...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru