Почему я не могу сложить числа в for loop?

Мне нужно написать программу, которая считает сумму введенных чисел и завершает исполнение по кликании символа, "q". При введении Другого символа (не цифры) программа выыдаст СООБЩЕНИЕ об ошибках и продолжит работу. Причем, с использованием "q" все ок, но почему-то не складываются мои значения в массиве. Помогите, пожалуйста. Если можете - оставьте кусочек кода.

    #include <stdio.h>
#include <string.h>
#include <stdbool.h>

int main() {
    int number[3];
    int concatenation = 0;
    int n;
    printf("Enter the quantity of elements.");
    scanf("%d", &n);
    bool entered = true;
    printf("Enter the numbers. ");
    //scanf("%d", number);
    for (int i = 0; i < n; i++) {
      scanf("%d", &number[i]);
      concatenation = concatenation + number[i];
      //printf("%d", concatenation);

    }
    
    printf("The concatenation is: %d\n", concatenation);
    printf("Enter any symbol (this will lead you to the error). But if you choose 'q', the program will exit. \n");
    do {
    printf("Press [q] to exit...");
    char ch = getchar();
    if (ch != 'q')
        printf("Error.\r\n");
    else
        break;
    } while (true);
    return 0;
}

Output:

nter the quantity of elements.3 
Enter the numbers. 3, 4, 5
The concatenation is: 32768
Enter any symbol (this will lead you to the error). But if you choose 'q', the program will exit. 
Press [q] to exit...Error.
Press [q] to exit...Error.
Press [q] to exit...Error.
Press [q] to exit...Error.
Press [q] to exit...Error.
Press [q] to exit...Error.
Press [q] to exit...Error.
Press [q] to exit...q


Ответы (2 шт):

Автор решения: Павел Ериков

Если вам нужно вводить числа с запятыми и т.д., то вот пример кода:

for (int i = 0; i < n; ) {
    //Проверяем было ли введено число
    if (scanf("%d", &number[i]) == 1)
        //Если да то увеличиваем кол-во введенных чисел на 1 и считаем сумму
        concatenation = concatenation + number[i++];
    //если нет то освобождаем буфер от неправильно введенного символа
    else getchar();
}

Приведенный код будет работать до тех пор пока пользователь не введет n чисел.

Почитать поподробней про scanf можете тут ну или тут

Выложу полный код для примера:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <locale.h>

int main() {
    char* locale = setlocale(LC_ALL, "");

    int number[3];
    int concatenation = 0;
    int n;
    printf("Введите кол-во элементов: ");
    scanf("%d", &n);

    printf("Введите %d элементов: ", n);
    for (int i = 0; i < n; ) {
        //Проверяем было ли введено число
        if (scanf("%d", &number[i]) == 1)
            //Если да то увеличиваем кол-во введенных чисел на 1 и считаем сумму
            concatenation = concatenation + number[i++];
        //если нет то освобождаем буфер от неправильно введенного символа
        else getchar();
    }
    getchar();
    printf("Итоговая сумма: %d\n", concatenation);

    printf("Введите любой сивол и получите ошибку, но если введете 'q' то произойдет выход из программы\n");
    do {
        printf("Нажмите [q] для выхода...");
        char ch = getchar();
        char sch = getchar();
        //Чтобы не повторялось сообщение об ошибке
        //Нужно очистить буфер от символа новой строки
        //и проверить если пользователь сначала ввел символ новой строки а потом уже 
        //например q
        if (ch != 'q' && sch != 'q')
            printf("Ошибка.\r\n");
        else break;
    } while (true);

    return 0;
}

Результат программы: Результат

→ Ссылка
Автор решения: hot_penguin

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

→ Ссылка