C - fscanf混合数和静态文本

时间:2013-03-08 16:56:54

标签: c scanf

我正在尝试读取以这种方式格式化的文件:

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);

但由于某种原因,只填充了第一个变量。有谁知道为什么会这样?

2 个答案:

答案 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')
   ;