Как получить символы, разделенные пробелом, используя scanf - PullRequest
2 голосов
/ 12 апреля 2020

Вот input.txt

5
A B C D E

Я хочу получить эти символы, поэтому я использовал этот код:

//...
int n;
fscanf(fp_i, "%d", &n);
//...
char data;
for (int i = 0; i < n; i++) {
    fscanf(fp_i, "%c", &data);
    array_c[i] = data;
}
//...

В array_c все еще были пробелы, поэтому я попытался " %c ", и это сработало!

Я хочу узнать о другом способе получения символов с пробелами. Есть ли более изощренный способ?

Ответы [ 2 ]

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

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

for (int i = 0; i < n; i++) {
    fscanf(fp_i, " %c ", &array_c[i]);
}

Обратите внимание, что для array_c должно быть трактуется как строка, она должна иметь 6 элементов, являясь шестым элементом с нулевым терминатором.

Вы должны иметь:

//...
int n;
fscanf(fp_i, "%d", &n);
char array_c[n + 1];
//...
for (int i = 0; i < n ; i++) {
    fscanf(fp_i, " %c", &array_c[i]);
}
array_c[n] = '\0';
//...

Рабочий образец

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

Просто дополнительное пространство перед %c должно работать.

int n;
fscanf(fp_i, "%d", &n);

char data;
for (int i = 0; i < n; i++) {
    fscanf(fp_i, " %c", &data); // space front of %c
    array_c[i] = data;
}
...