C语言中fscanf()的用法

我写一段程序如下:但读不了数据,求高手指导,谢谢!
#include<stdio.h>
main()
{
struct student
{
char num[10];
char name[10];
float score[3];
float avg;
}t[100];
FILE *fp;
int i,n=2;
/***************************************************************************/
if((fp=fopen("121.text","r"))==NULL)
{
printf("没有此文件\n");
exit(0);
}
fclose(fp);
for(i=0;i<n;i++)
fscanf(fp,"%s%s%f%f%f%f",t[i].name,&t[i].score[0],
&t[i].score[1],&t[i].score[2],&t[i].avg);
/*****************************************************************************/
for(i=0;i<n;i++)
printf(fp,"%s\t%s\t%-5.2f\t%-5.2f\t%-5.2f\t%-5.2f\t\n",
t[i].num,t[i].name,t[i].score[0],t[i].score[1],t[i].score[2],t[i].avg);
}
文件121.text的数据如下:
1001 yang 78.00 89.00 79.00 80.00
1002 zhang 67.00 99.00 70.00 82.00
好像少了一个,改成下面这样之后不行。
fscanf(fp,"%s%s%f%f%f%f",t[i].num,t[i].name,&t[i].score[0],
&t[i].score[1],&t[i].score[2],&t[i].avg);
最新回答
に枯叶蝶的未来

2024-10-22 18:10:58

功 能: 从一个流中执行格式化输入\x0d\x0a 用 法: int fscanf(FILE *stream, char *format,[argument...]);\x0d\x0a int fscanf(文件指针,格式字符串,输入列表);\x0d\x0a 返回值:整型,数值等于[argument...]的个数\x0d\x0a 程序例:\x0d\x0a #include \x0d\x0a #include \x0d\x0a int main(void)\x0d\x0a {\x0d\x0a int i;\x0d\x0a printf("Input an integer: ");\x0d\x0a if (fscanf(stdin, "%d", &i))\x0d\x0a printf("The integer read was: %d\n",\x0d\x0a i);\x0d\x0a else\x0d\x0a {\x0d\x0a fprintf(stderr, "Error reading an \\x0d\x0a integer from stdin.\n");\x0d\x0a exit(1);\x0d\x0a }\x0d\x0a return 0;\x0d\x0a }\x0d\x0a 返回EOF如果读取到文件结尾。
落花终究无情ゞ

2024-10-22 14:08:51

首先,你要确认你的这个文件名是正确的,这个文件名没有隐藏的后缀名,其次,你这个文件放的位置要正确,要放在你的工程的路径下,如果你不知道要将这个文件放在哪里,请把你的代码中fp = fopen("121.text", "r")的"121.text"这个改成绝对路径 :比如说:"F:\CWorkspace\hello\121.text",这个路径要看你具体存放在哪里了
另外,你的程序有些问题,我给你改好了,如果你的文件没问题的话用这个就可以运行了
#include<stdio.h>
int main()
{
struct student
{
char num[10];
char name[10];
float score[3];
float avg;
} t[100];
FILE *fp;
int i, n = 2;
/***************************************************************************/
if ((fp = fopen("121.text", "r")) == NULL)
{
printf("没有此文件\n");
perror("fopen");
exit(0);
}
for (i = 0; i < n; i++)
fscanf(fp, "%s%s%f%f%f%f", t[i].num, t[i].name, &t[i].score[0], &t[i].score[1],
&t[i].score[2], &t[i].avg);
fclose(fp);
/*****************************************************************************/
for (i = 0; i < n; i++)
printf("%s\t%s\t%-5.2f\t%-5.2f\t%-5.2f\t%-5.2f\t\n", t[i].num,
t[i].name, t[i].score[0], t[i].score[1], t[i].score[2],
t[i].avg);
return 0;
}
那一抹浅笑

2024-10-22 21:36:47

开什么玩笑,fclose(fp);是关闭文件,也就是让文件指针fp不指向文件121.text,你都关了文件了下面还怎么再读数据?把fclose(fp);放到程序末尾试试吧。