Ваш l oop читает по одному символу за раз. Когда вы видите ди git, вы должны прочитать все цифры и превратить их в число во время чтения цифр.
Один из способов сделать это, следуя вашим if(temp>= '0' && temp<= '9')
до l oop символам чтения и обработка цифр.
Однако последний символ, который вы сейчас читаете, это , а не a di git. Затем вы заканчиваете свой di git чтением l oop, но теперь у вашего внешнего l oop есть проблема, потому что символ был прочитан, но еще не обработан. Чтобы исправить это, используйте ungetc
(посмотрите в документации).
if(temp>= '0' && temp<= '9') {
int number= temp-'0';
while ((temp= fgetc(fp))>='0' && temp <='9')
number= number * 10 + (temp-'0');
ungetc(temp,fp);
sum += number;
}
Читая число '20', вы сначала прочитали 2
. Следующая ди git, которую вы видите, означает, что число, которое вы уже прочитали, в десять раз больше, поэтому вы умножаете его на десять. Затем вы превращаете ASCII di git в десятичное число, вычитая '0'
и добавляя его к числу, которое вы уже прочитали. Обратите внимание, что код ASCII гарантирует, что символы di git имеют порядок '0,'1','2',...'9'
, поэтому '3' - '0' = 3