[ Умышленно не полный ответ, а способ получить длинный комментарий ]
Применяется общее правило: если вы чувствуете, что функция не в состоянии делать то, что должна:посмотрите на его документацию, чтобы узнать, вернет ли он какое-либо состояние завершения / ошибки.Здесь: обратитесь к значению, которое scanf()
функция возвращает .
Дословно из scanf()
s документов :
Функция scanf возвращает значение макроса EOF, если ошибка ввода произошла до завершения первого преобразования (если оно есть).В противном случае функция scanf возвращает количество назначенных элементов ввода, которое может быть меньше предусмотренного или даже равно нулю в случае неудачного раннего сопоставления.
Также во время разработки имеет смысл добавить отладочный вывод, чтобы увидеть, что на самом деле происходит.
Таким образом, ваш код может выглядеть следующим образом:
/* main.c */
#include <stdlib.h> /* for EXIT_* macros */
#include <stdio.h>
int main(void)
{
int sum;
char digit_1, digit_2, digit_3, digit_4, digit_5;
printf("Please enter a five digit number\n");
int result = scanf("%c,%c,%c,%c,%c", &digit_1, &digit_2, &digit_3, &digit_4, &digit_5);
if (EOF == result)
{
if (ferror(stdin))
{
perror("scanf() failed");
exit(EXIT_FAILURE);
}
result = 0;
}
if (5 > result)
{
fprintf(stderr, "To few input: Should be %d, but is %d\n", 5, result);
exit(EXIT_FAILURE);
}
#ifdef DEBUG
printf("printing as char: %c, %c, %c, %c, %c\n", digit_1, digit_2, digit_3, digit_4, digit_5);
printf("printing as int: %d, %d, %d, %d, %d\n", digit_1, digit_2, digit_3, digit_4, digit_5);
#endif
sum = digit_1 + digit_2 + digit_3 + digit_4 + digit_5;
printf("the sum of the digits is: %d", sum);
return EXIT_SUCCESS;
}
Скомпилируйте это с (большинством) всеми предупреждениями:
gcc -Wall -Wextra -pedantic -DDEBUG main.c -g -o main
Чтобы исправить последнюю ошибку, я оставляю вам.Если все готово, просто удалите -DDEBUG
из опций компиляции, что исключает (надеюсь) просветляющие printf
с.;)
Извлеченный урок может быть следующим: проверка на наличие ошибок и ведение журнала - это отладка бесплатно.