Я могу распечатать строковые значения того, что я прочитал, но у меня возникли проблемы с преобразованием, чтобы использовать их эквивалент ASCII - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь прочитать несколько строк из файла и сохранить значение ASCII каждого прочитанного символа, пока я иду строка за строкой.Мой ввод выглядит следующим образом:

input

Вот как первоначально выглядел мой код и что он произвел:

char buf3[256], buf5[256], buf6[256], buf7[256], buf4[256], buf9[256];
    fscanf(fp, "%[^\n]", buf3);
while (!feof(fp)) {
    fscanf(fp, "%s %s %s %s %s", buf4, buf5, buf6, buf7, buf9);
    printf("\n%c %c %c %c %c", *buf4, *buf5, *buf6, *buf7, *buf9);
}

result

Я думал, что распечатка% c даст мне значение ASCII.Есть ли способ конвертировать эти значения?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Предположим, что ваш ввод 011R0 хранится в массиве buf, а затем для печати значения ASCII каждого символа вам нужно будет получить доступ к каждому символу и напечатать его так, как если бы вы печатали целое число:

  int i;
  while(buf[i])
   {
       printf("%d\n",buf[i]);
       ++i;
   }

Используя индексы [i] можно получить доступ к каждому символу, если строка. Кроме того, посмотрите на это: Почему «while (! Feof (file))» всегда неверно?

0 голосов
/ 16 сентября 2018

Я думал, что распечатка% 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() здесь

...