我想使用 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
的结果是完全字符串!
正如评论中所建议的,你可以这样做
fscanf(arqProdTemp, "%[^|]|%d|%s", insumo, &qtdInsumos, unidade);
请注意,如果qtdInsumos
是一个整数变量,则需要将其地址传递给带有&qtdInsumos
的fscanf()
。不是它的价值。
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
}