gpt4 book ai didi

c - 为什么我用 fscanf 读取第二行时得到一个空字符?

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:06 25 4
gpt4 key购买 nike

我正在尝试完全读取文件的第一行,直到 \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);
}

最佳答案

这里:

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

关于c - 为什么我用 fscanf 读取第二行时得到一个空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15886279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com