0

我正在尝试完全读取文件的第一行,直到\n将其存储在变量中。然后我尝试读取文件的第二行,但它没有给出正确的输出。我不确定发生了什么。它是在读取空白,还是文件指针在 fscanf() 之后移动?

abc.txt 文件包含:

>hello test file<br>
1

但是输出(我在 printf 中得到的)是:

status:
>pwd :hello test file

那么为什么这里缺少状态呢?

这是我的程序:

#include <stdio.h>
#include <string.h>

int main()
{
  char status,pwd[30];
  FILE *fp;
  fp=fopen("abc.txt","r");
  if(fp == NULL)
    {
        printf("Cannot open file ");
        fclose(fp);
       return 0;
    }

  fscanf(fp,"%29[^\n]",pwd);  
  fscanf(fp,"%c",&status);

  fclose(fp);
  printf("\n Status : %c pwd: %s",status,pwd);
}
4

2 回答 2

3

这里:

 fscanf(fp,"%29[^\n]",pwd);  

你告诉fscanf()它阅读,直到它看到一个换行符,然后停止。这里:

 fscanf(fp,"%c",&status);

您要fscanf()读取下一个字符(即换行符)。那么这里:

printf("\n Status : %c pwd: %s",status,pwd);

它将换行符打印为一个字符(所以你看不到它,它只是一个空行)

如果您想使用 fscanf() 像这样读取它,则需要使用该换行符。

一种选择是只做类似的事情:

fscanf(fp,"%29[^\n]",pwd); 
fgetc(fp);
fscanf(fp,"%c",&status);

%c另一种解决方案是在告诉fscanf()忽略空白字符之前添加一个空格:

fscanf(fp,"%29[^\n]",pwd); 
fscanf(fp," %c",&status);
于 2013-04-08T18:33:04.917 回答
1

第一个fscanf是将换行符放回原处,因此第二个fscanf只是读取换行符,而不是您想要的字符。您可以通过在 之前放置一个空格来解决此问题%c,例如

fscanf(fp," %c",&status);
于 2013-04-08T18:33:25.153 回答