Вы звоните getchar()
слишком много раз в вашем while
цикле.Каждый из них отбрасывает результат предыдущего вызова.Вы должны просто использовать результат вызова getchar()
в условии while()
, а не вызывать его снова.
Вы также не сохраняете символ, прочитанный перед циклом, в аккумулятор.
У вас есть опечатка в ch = '0'
, которая должна быть ch - '0'
.
Вам необходимо объявить ch
как int
, а не char
, поскольку EOF
не является символом.
EXIT_FAILURE
должно быть exit(EXIT_FAILURE)
.И вы не должны ставить break;
перед ним, так как это завершит цикл, пропуская вызов exit()
.
Вы можете инициализировать negative
в 1
, так что в конце вы можетепросто умножьте его без необходимости сначала проверять значение.В этом случае лучшим именем для переменной будет sign
.
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
int main() {
int accumulator = 0;
int ch;
int sign = 1;
ch = getchar();
if (ch == '-') {
sign = -1;
ch = getchar();
}
if (!isdigit(ch)) {
puts("\nError: Not valid number.\nPlease try again");
exit(EXIT_FAILURE);
}
accumulator = ch - '0';
while ((ch = getchar()) != '\n' && ch != EOF) {
if (!isdigit(ch)) {
puts("\nError: Not valid number.\nPlease try again");
exit(EXIT_FAILURE);
}
accumulator *= 10;
accumulator += (ch - '0');
}
accumulator *= sign;
printf("%d", accumulator);
}