如何使用 fscanf 读取带分隔符的文件?
How to read file with delimiters using fscanf?
我正在尝试读取文件并将信息存储到以下缓冲区
char bookCode[MAX];
char title [MAX];
char author [MAX];
char year [MAX];
float selfCost;
float selfPrice;
我的文件数据是这样的
1738|Jane Eyre|Charlotte Bronte|1997|2.5|4.09
2743|The Kite Runner|Khaled Hosseini|2018|6.32|8.9
6472|Memoirs of a Geisha|Arthur Golden|2011|4.21|6.61
7263|The Divine Comedy|Dante|2009|5.59|7.98
3547|Outlander|Diana Gabaldon|1996|10.99|12.07
目前,我尝试了以下
while (fscanf(fi, "%[^|]|%[^|]|%[^|]|%[^|]|%f|%f",bookCode,title,author,year,&selfCost,&selfPrice)==6)
但是它只读了一行然后就停止了。有什么建议吗?
代码
#include <stdio.h>
#include <stdlib.h>
#define INPUT "HW2_file1.txt"
#define MAX 1000
int main(void)
{
FILE *fi = fopen(INPUT, "r");
if (fi!=NULL)
{
printf ("Input file is opened sucesfully\n");
}
else
{
perror ("Error opening the file: \n");
exit(1);
}
ReadingData(fi);
fclose(fi);
return 0;
}
void ReadingData (FILE *fi)
{
int i=0;
char bookCode[MAX];
char title [MAX];
char author [MAX];
char year [MAX];
float selfCost;
float selfPrice;
while (fscanf(fi, " %[^|]|%[^|]|%[^|]|%[^|]|%f|%f",bookCode,title,author,year,&selfCost,&selfPrice)==6)
{
printf ("%s %s %s %s %.2f %.2f\n",bookCode,title,author,year,selfCost,selfPrice);
i++;
printf ("%d\n",i);
}
}
您的代码有效(只要我在调用它之前重新排序定义以定义 ReadingData
,添加必要的 #include
和 #define MAX
,并简化它以摆脱未使用的 data
类型;我还压缩了变量声明以尝试使 TIO link 适合注释,但最终是徒劳的):
#include <stdio.h>
#define MAX 256
void ReadingData (FILE *fi)
{
int i=0;
char bookCode[MAX], title[MAX], author[MAX], year[MAX];
float selfCost, selfPrice;
while (fscanf(fi, " %[^|]|%[^|]|%[^|]|%[^|]|%f|%f",bookCode,title,author,year,&selfCost,&selfPrice)==6)
{
printf ("%s %s %s %s %.2f %.2f\n",bookCode,title,author,year,selfCost,selfPrice);
i++;
printf ("%d\n",i);
}
}
int main(void)
{
ReadingData(stdin);
return 0;
}
Click this Try it online! link 并且它会 运行,很好,你提供的输入。因此,要么是您的输入错误,要么是您遗漏了代码,要么是您遇到了一些其他问题,因为缺乏最小的、可重现的示例而被隐藏了。
我正在尝试读取文件并将信息存储到以下缓冲区
char bookCode[MAX];
char title [MAX];
char author [MAX];
char year [MAX];
float selfCost;
float selfPrice;
我的文件数据是这样的
1738|Jane Eyre|Charlotte Bronte|1997|2.5|4.09
2743|The Kite Runner|Khaled Hosseini|2018|6.32|8.9
6472|Memoirs of a Geisha|Arthur Golden|2011|4.21|6.61
7263|The Divine Comedy|Dante|2009|5.59|7.98
3547|Outlander|Diana Gabaldon|1996|10.99|12.07
目前,我尝试了以下
while (fscanf(fi, "%[^|]|%[^|]|%[^|]|%[^|]|%f|%f",bookCode,title,author,year,&selfCost,&selfPrice)==6)
但是它只读了一行然后就停止了。有什么建议吗?
代码
#include <stdio.h>
#include <stdlib.h>
#define INPUT "HW2_file1.txt"
#define MAX 1000
int main(void)
{
FILE *fi = fopen(INPUT, "r");
if (fi!=NULL)
{
printf ("Input file is opened sucesfully\n");
}
else
{
perror ("Error opening the file: \n");
exit(1);
}
ReadingData(fi);
fclose(fi);
return 0;
}
void ReadingData (FILE *fi)
{
int i=0;
char bookCode[MAX];
char title [MAX];
char author [MAX];
char year [MAX];
float selfCost;
float selfPrice;
while (fscanf(fi, " %[^|]|%[^|]|%[^|]|%[^|]|%f|%f",bookCode,title,author,year,&selfCost,&selfPrice)==6)
{
printf ("%s %s %s %s %.2f %.2f\n",bookCode,title,author,year,selfCost,selfPrice);
i++;
printf ("%d\n",i);
}
}
您的代码有效(只要我在调用它之前重新排序定义以定义 ReadingData
,添加必要的 #include
和 #define MAX
,并简化它以摆脱未使用的 data
类型;我还压缩了变量声明以尝试使 TIO link 适合注释,但最终是徒劳的):
#include <stdio.h>
#define MAX 256
void ReadingData (FILE *fi)
{
int i=0;
char bookCode[MAX], title[MAX], author[MAX], year[MAX];
float selfCost, selfPrice;
while (fscanf(fi, " %[^|]|%[^|]|%[^|]|%[^|]|%f|%f",bookCode,title,author,year,&selfCost,&selfPrice)==6)
{
printf ("%s %s %s %s %.2f %.2f\n",bookCode,title,author,year,selfCost,selfPrice);
i++;
printf ("%d\n",i);
}
}
int main(void)
{
ReadingData(stdin);
return 0;
}
Click this Try it online! link 并且它会 运行,很好,你提供的输入。因此,要么是您的输入错误,要么是您遗漏了代码,要么是您遇到了一些其他问题,因为缺乏最小的、可重现的示例而被隐藏了。