fscanf: как читать, а не назначать запятые? - PullRequest
0 голосов
/ 26 января 2019

У меня есть программа на C, которая читает список значений, разделенных запятыми, из файла .txt и присваивает значения переменным. Я хочу присвоить первое значение для строки, второе для типа int, третье для двойного и четвертое для двойного. Однако вся строка присваивается этой строке, а остальные являются мусором или случайными значениями. Я хочу иметь возможность "пропустить" запятые и прочитать присвоенные значения между запятыми. Последний дубль имеет знак процента в конце, поэтому я читаю значение, используя %%, по крайней мере, это то, что я считаю, должно быть сделано.

fscanf(text_file, "%s,%d,%lf,%lf%%%[^\n]", title, &count, &size, &percentage);

Точка данных будет выглядеть так: желто-листья, 43,4.50,9.00% Но значения заголовка содержат всю строку, а остальные значения являются просто случайными значениями мусора.

1 Ответ

0 голосов
/ 26 января 2019

Имейте в виду, что scanf() не подходит для ввода пользователем.

В любом случае ... "%s" читает запятые (пропускает пробелы), попробуйте "%[^,]".

// assuming
// char title[99];
if (fscanf(f, " %98[^,],%d...", title, ...) != 4) /* error */;
//             ^ skip whitespace

Еще лучше: прочитать всю строку с помощью fgets(), а затем проанализировать ее, возможно, с помощью sscanf().

char buff[999];
while (fgets(buff, sizeof buff, f)) {
    // parse buff
}
...