fscanf
не работает подобный. Когда вы указываете спецификатор формата %s
, он читает все до следующего пробела (или конца ввода). Это означает, что ваш первый %s
будет читать truck,
, то есть включать запятую в строку, которую он читает. %s
не волнует, что в вашей строке формата вы разместили ,
после %s
и, таким образом, «запросили» запятую, чтобы ее не прочитали. fscanf
не поддерживает такие запросы. fscanf
не имеет каких-либо расширенных возможностей поиска или соответствия шаблону. Он слепо читает столько, сколько запрошено текущим спецификатором формата. %s
читает до следующего пробела - это все, о чем он заботится.
Если вы хотите прочитать это как значения CSV, вам необходимо вручную направлять fscanf
на каждом шагу. В этом случае вы можете использовать %[^,]
для всех строковых значений. Нечто подобное могло бы работать
fscanf(file,
"%[^,], %[^,], %d",
items[i].type,
temp,
&items[i].price)
Если вы хотите, чтобы пропустить все ведущие пробелы, вы можете использовать формат " %[^,], %[^,], %d"
.
Пространство до %d
может быть опущено, что означает, что "%[^,], %[^,],%d"
- это то же самое, что и "%[^,], %[^,], %d"
.