Как написать программу, которая будет заканчиваться используя "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 шт):

Автор решения: Ayrat Arifullin

Ваша программа заработает в таком виде. Обратите внимание на тип 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;
}
→ Ссылка
Автор решения: Vladimir

Честно говоря, я не понимаю Вашей задумки и что мешает сделать правильно. Я заменил ввод символа 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;
}
→ Ссылка