Я думал, что распечатка% c даст мне значение ASCII? Нет , спецификатор формата %c
выводит эквиваленты char
значение, поскольку buf4
, buf5
.. и т. д. являются массивом символов, поэтому, когда вы печатаете *buf5
, он печатает первый символ массива, и если вы печатаете ascii
значение этого, вы должны вычесть его из 48
(значение ASCII 0), если *buf
содержит цифры (0 - 9).Например,
printf("%d\n",(*buf4) - 48);
Или
printf("%d\n",(*buf4) - '0');
Также в этом конкретном случае его использование стека памяти позволяет объявить пять массивов символов, таких как buf3
, buf4
.. buf9
.Вы можете использовать только один массив символов и выполнить операцию.Например,
int index = 0 ;
char buf[20]; /* lets say each word of file are length of 20 char, you can change it */
while (fscanf(fp,"%s",buf) != EOF) {
while(buf[index] != '\0') {
if(buf[index] >= '0' && buf[index] <= '9') { /*or use isdigit() */
printf("%d",buf[index] - 48);
}
else { /* apart from 0,1,...9 */
printf("%d",buf[index]);
}
index++;
}
printf(" ");
index = 0;
}
Также прочитайте, почему неправильно использовать feof()
здесь