Вопросы о fscanf. Какой из двух лучше? - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок, и мне нужна помощь относительно fscanf . Мне нужно отсканировать текстовый файл с несколькими строками. Какой из этих двух вариантов лучше?

Предположим, переменные объявлены и stdio.h включен.

КОД 1:

while (fscanf(pSource, "%c%c%c%c%c%c", &c1, &c2, &c3, &c4, &c5, &c6) == 6)
    printf("%c%c%c%c%c%c", c1, c2, c3, c4, c5, c6);

КОД 2:

int res; //note the change, I included a new variable
while ((res = fscanf(pSource, "%c%c%c%c%c%c", &c1, &c2, &c3, &c4, &c5, &c6)) == 6)
    printf("%c%c%c%c%c%c", c1, c2, c3, c4, c5, c6);

Предположим, что pSource указывает на этот текстовый файл:

A = 3
D = 2
F = 1
G = 1

Нужно ли объявлять каждый символ и сканировать каждый? Разве я не могу просто отсканировать строку в строку? Поскольку все они считаются символами в текстовом файле?

Если у вас есть более привлекательный код или вообще более предпочтительный код, пожалуйста, научите меня. Большое вам спасибо.

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

вы можете использовать fgets (). Вы можете посмотреть документацию здесь

0 голосов
/ 01 апреля 2020

Нужно ли объявлять каждый символ и сканировать каждый?

Нет. Можно было бы так закодировать, но это не гибко.

Разве я не могу просто отсканировать строку в строку?

Хорошая идея. *scanf() сложно использовать для чтения строки . fgets() - правильный инструмент.

Поскольку все они считаются символами в текстовом файле?

Да, хотя данные, безусловно, подразумевают наличие буквы и цифры читать.


Что из двух лучше?

Ни то, ни другое. Оба просто читают 6 символов, не имея представления о считывании / обнаружении строки .

3-й вариант будет читать строку с fgets() и затем анализировать строка .

#define LINE_SIZE 80
char buffer[LINE_SIZE];

while (fgets(buffer, sizeof buffer, pSource)) {
  char letter;
  int value;
  if (sscanf(buffer, " %c = %d", &letter, &number) == 2) {
    printf("Success %c %d\n", letter, number);
  } else {
    printf("Fail <%s>\n", buffer);
  }
}
...