fscanf считывает только одно слово

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <Windows.h>

int main()
{
    setlocale(LC_ALL, "");
    SetConsoleOutputCP(1251);
    FILE* S1, * S2;
    printf("Введите имя файла для сортировки(без .txt): ");
    char sortname[256];
    gets(sortname);
    S1 = fopen(strcat(sortname, ".txt"), "r+");
    char info1[256];
    char info2[256];
    for (int i = 0; i < 50; i++) {
        fscanf(S1, "%s [%s]", info1, info2);
        printf("%s\n", info1);
    }
    getch();
}

Например у меня в файле есть строка Klubnika Banan [Yabloko Apelsin]. При запуске программы в info1 записывается Klubnika, а в info2 записывается Yabloko. Т.е при считывании пропускается все слова, кроме первого. Как это исправить? (мне нужно чтобы в info1 записывало Klubnika Banan, а в info2 Yabloko Apelsin)


Ответы (1 шт):

Автор решения: nevilad

Изменить строку в fscanf на [a-zA-Z ]. Она разберет строку содержащую символы от a до z, от A до Z и пробелы. Я еще добавил %256 для указания максимального размера читаемой строки. Также добавил проверки конца файла, ошибок чтения и что считалось две строки.

for (int i = 0; i < 50; i++) {
    int numMatched = fscanf(S1, " %256[a-zA-Z ] [%256[a-zA-Z ]]", info1, info2);
    if (feof(S1) || ferror(S1))
      break;
    if (numMatched != 2)
      break; //некорректная строка.
    printf("%s, %s\n", info1, info2);
}
→ Ссылка