我试图完全读取文件的第一行,直到\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);
}
答案 0 :(得分: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);
答案 1 :(得分:1)
第一个fscanf
正在放回换行符,所以第二个fscanf
只是读取换行符,而不是你想要的字符。你可以通过在%c
之前加一个空格来解决这个问题,例如
fscanf(fp," %c",&status);