Как написать программу, которая будет заканчиваться используя "q"? И, чтобы если юзер вводил какой-то символ, который приведет к ошибке
Что ж, мне нужно cложить мои целые числа, но также мне нужно сделать выход из программы, если пользователь вводит «q», но если он / она вводит любой другой символ, это приведет к ошибке. Однако моя программа не видит цикл while, и я не знаю почему, потому что мне это кажется логичным ... Если вы можете мне помочь, это будет действительно здорово. Спасибо заранее. (если я использую while (entered) {.., будет бесконечно «Error. Try again». Возможно, вопрос глупый, может я туплю, но буду очень благодарна, если мне сможете помочь и привести пример кода.
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main() {
int first_number;
int second_number;
int concatenation;
char any_symbol;
bool entered = true;
printf("Enter the first number. ");
scanf("%d",&first_number);
printf("Enter the second number. ");
scanf("%d", &second_number);
printf("Enter any symbol (this will lead you to the error). But if you choose 'q', the program will exit. \n");
scanf("%s", &any_symbol);
printf("The symbol is: %c\n", any_symbol);
concatenation = first_number + second_number;
printf("The concatenation is: %d\n", concatenation);
while (!entered) {
if (strcmp (&any_symbol, "q") == 0) {
break;
}
else if (any_symbol) {
printf("Error. Try again.");
}
}
return 0;
}
Вывод:
Enter the first number. 1
Enter the second number. 2
Enter any symbol (this will lead you to the error). But if you choose 'q', the program will exit.
w
The symbol is: w
The concatenation is: 3
Или:
Enter the first number. 1
Enter the second number. 2
Enter any symbol (this will lead you to the error). But if you choose 'q', the program will exit.
q
The symbol is: q
The concatenation is: 3
Ответы (2 шт):
Ваша программа заработает в таком виде. Обратите внимание на тип any_symbol
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main() {
int first_number;
int second_number;
int concatenation;
char any_symbol[3];
bool entered = false;
printf("Enter the first number. ");
scanf("%d", &first_number);
printf("Enter the second number. ");
scanf("%d", &second_number);
printf("Enter any symbol (this will lead you to the error). But if you choose 'q', the program will exit. \n");
scanf("%s", &any_symbol);
printf("The symbol is: %s\n", any_symbol);
concatenation = first_number + second_number;
printf("The concatenation is: %d\n", concatenation);
entered = true;
while (!entered) {
if (strcmp(any_symbol, "q") == 0) {
break;
}
else if (any_symbol) {
printf("Error. Try again.");
}
}
return 0;
}
Честно говоря, я не понимаю Вашей задумки и что мешает сделать правильно. Я заменил ввод символа any_symbol - scanf(" %c", &any_symbol); (пробел перед %c должен выкинуть все пробельные символы (в том числе и символ перевода строки), что остались от предыдущего ввода), заголовок цикла while (entered) и проверку условия if (any_symbol == 'q'). При этом, совершенно не понятно, что должно произойти в случае неверного ввода. Нужно потребовать новый ввод данных? - тогда цикл Вы начали немного поздновато. Пока я просто определяю неверный ввод и останавливаю цикл.
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main() {
int first_number;
int second_number;
int concatenation;
char any_symbol;
bool entered = true;
printf("Enter the first number. ");
scanf("%d", &first_number);
printf("Enter the second number. ");
scanf("%d", &second_number);
printf("Enter any symbol (this will lead you to the error). But if you choose 'q', the program will exit. \n");
// scanf("%s", &any_symbol);
scanf(" %c", &any_symbol);
printf("The symbol is: %c\n", any_symbol);
concatenation = first_number + second_number;
printf("The concatenation is: %d\n", concatenation);
while (entered) {
// if (strcmp(any_symbol, "q") == 0) {
if (any_symbol == 'q') {
break;
}
else if (any_symbol) {
printf("Error. Try again.\n");
entered = false;
}
}
return 0;
}