【发布时间】:2018-12-14 12:12:49
【问题描述】:
我想使用 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 的结果是整个字符串!
【问题讨论】:
-
%s拾取所有连续的非空白字符。查看%[],例如。%[^|] -
但我要改用那个?我需要三个值。
-
他建议你使用
"%[^|]|%d|%s"。也就是说,将您的第一个%s替换为%[^|]。 -
或者,您可以从
fgets和strtok之类的东西开始此类任务,而不是fscanf。 -
请注意,您应该使用
while (fscanf(…) == 3)来确保您读取 3 个值。如果你得到 2、1 或 0,你就会遇到各种格式问题(你当前的模式不太可能返回 0,但一般来说,这是一个选项)。以及表示没有更多数据要读取的 EOF。
标签: c string file formatting scanf