Почему я не могу сложить числа в 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;
}
Программа работает правильно. Ошибка в том, как вы вводите значения. Правильно ввести число и нажать пробел, затем еще одно число и так далее..
