5

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

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

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

4

2 回答 2

1

字符串格式开头加空格避免换行问题

fscanf(fptr, " Text Description:%d",&desc1);
fscanf(fptr, " Description2:%d",&desc2);
fscanf(fptr, " More descriptive things:%d",&desc3);
于 2013-03-08T16:59:23.667 回答
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')
   ;
于 2013-03-08T16:58:38.823 回答