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);
}