我正在尝试读取以这种方式格式化的文件:
Text Description: 12
Description2: 1
More descriptive things: 6
我想把数字12,1和6读成变量。
我尝试过这样的代码:
fscanf(fptr, "Text Description:%d",&desc1);
fscanf(fptr, "Description2:%d",&desc2);
fscanf(fptr, "More descriptive things:%d",&desc3);
但由于某种原因,只填充了第一个变量。有谁知道为什么会这样?
答案 0 :(得分:1)
在字符串格式的开头添加空格以避免新行问题
fscanf(fptr, " Text Description:%d",&desc1);
fscanf(fptr, " Description2:%d",&desc2);
fscanf(fptr, " More descriptive things:%d",&desc3);
答案 1 :(得分:0)
一旦处理了12,你就不会读新行了,所以其他两个调用都是找到而不是字符串或整数,因此失败了。您可以在下一个fscanf
调用中使用空格(它会消耗您要匹配的字符串前面的所有空白字符)。或者,您可以通过调用fgetc
来使用它,只要每行直接以换行符结束,例如
fscanf(fptr, "Text Description:%d",&desc1);
fgetc(fptr); // drop the next character
fscanf(fptr, "Description2:%d",&desc2);
在整数之后删除所有流输入,直到下一个'\ n',可以用循环来完成:
while (fgetc(fptr) != '\n')
;