如何在C中使用fscanf()来识别被识别为字符串的模式?
我想使用fscanf识别以下模式:如何在C中使用fscanf()来识别被识别为字符串的模式?,c,string,file,formatting,scanf,C,String,File,Formatting,Scanf,我想使用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, qtdInsum
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()
。不是它的价值
insomo
和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
}
正如评论中所建议的,您可以这样做
fscanf(arqProdTemp, "%[^|]|%d|%s", insumo, &qtdInsumos, unidade);
请注意,如果qtdInsumos
是一个整数变量,则需要使用&qtdInsumos
将其地址传递到fscanf()
。不是它的价值
insomo
和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
}
%s
拾取所有连续的非空白字符。查看%[]
,例如%[^ |]
,但我会用它来代替吗?我需要三个值中的一个。他建议您使用“%[^ |][124;%d |%s”
。也就是说,将第一个%s
替换为%[^ |]
。或者,对于此类任务,您可以从fgets
和类似strtok
的内容开始,而不是使用fscanf
。请注意,您应该使用while(fscanf(…)==3)
来确保读取3个值。如果得到2、1或0,则会出现各种格式问题(当前模式不可能返回0,但一般来说,这是一个选项)。以及表示没有更多数据可读取的EOF。%s
拾取所有连续的非空白字符。查看%[]
,例如%[^ |]
,但我会用它来代替吗?我需要三个值中的一个。他建议您使用“%[^ |][124;%d |%s”
。也就是说,将第一个%s
替换为%[^ |]
。或者,对于此类任务,您可以从fgets
和类似strtok
的内容开始,而不是使用fscanf
。请注意,您应该使用while(fscanf(…)==3)
来确保读取3个值。如果得到2、1或0,则会出现各种格式问题(当前模式不可能返回0,但一般来说,这是一个选项)。以及表示没有更多数据可读取的EOF。