Как использовать fscanf () в C для распознавания шаблонов, которые распознаются как строки? - PullRequest
0 голосов
/ 06 июля 2018

Я хочу использовать fscanf для распознавания следующего шаблона:

Product|10|Meter

Один товар, его количество и метр.

Использование fscanf() как:

fscanf(file, "%s|%d|%s");

Проблема, с которой я сталкиваюсь, состоит в том, что строка собирает все, а другие переменные не получают никакого значения.

Это мой код:

while ((fscanf(arqProdTemp, "%s|%d|%s", insumo, qtdInsumos, unidade)) != EOF) {
    printf("%s - %d %s", insumo, qtdInsumos, unidade);
}

Когда я использую функцию printf(), результатом insumo будет полностью строка!

1 Ответ

0 голосов
/ 06 июля 2018

Как предлагается в комментариях, вы можете сделать

fscanf(arqProdTemp, "%[^|]|%d|%s", insumo, &qtdInsumos, unidade);

Обратите внимание, что если qtdInsumos является целочисленной переменной, вам нужно передать ее адрес в fscanf() с помощью &qtdInsumos. Не его значение.

insumo и unidade - это символьные массивы, используемые для хранения строк. Убедитесь, что массивы достаточно велики для хранения строк и использования спецификаторов ширины, таких как

fscanf(arqProdTemp, "%14[^|]|%d|14%s", insumo, &qtdInsumos, unidade);

где 15 предполагается размером обоих массивов. Измените его в соответствии со своими потребностями.

Кроме того, проверьте возвращаемое значение fscanf(), чтобы увидеть, все ли прошло хорошо. fscanf() возвращает количество успешных назначений, которое в этом случае должно быть 3.

if( fscanf(arqProdTemp, "%[^|]|%d|%s", insumo, &qtdInsumos, unidade) != 3 )    
{
    //Something went wrong
}
...