首先,抱歉我的英语不好。
所以我的文件包含多个字符串和整数。
文件内容为
jonny#st.maria#100#200
antony#blabla#90#300
maria#chitchat#45#100
我的代码:
#include<stdio.h>
char name[10][20], school[10][20];
int op=0, score[8], dis[8];
int read(){
FILE *op = fopen("test.txt","r");
while(fscanf(op,"%[^#] # %[^#] # %d # %d",name[lis],school[lis],score[lis],dis[lis]) != EOF)
lis++;
fclose(op);
}
它会崩溃吗?你能说出正确的方法吗?
答案 0 :(得分:0)
您的数组是不同的大小(有些是8,有些是10个元素长)。您应该检查是否没有溢出最短的阵列。您显示的代码无法编译,因为未定义变量lis
- 如果已定义,则需要确保它已初始化为0.
您的代码也具有误导性,因为您有一个全局变量int op = 0;
,然后在read()
函数内FILE *op
。
您应该检查fopen()
的返回值,以确保它有效。不这样做并且无法打开文件是一个肯定的麻烦。
您需要将指向整数变量的指针传递给fscanf()
。
请注意,fscanf()
可能会在格式不正确的数据上返回0
(或确实1
,2
或3
)。这些值都与EOF
不同,都表示输入存在问题。 fscanf()
的正确测试更接近:
int lis = 0;
while(lis < 8 && fscanf(op, "%19[^#] # %19[^#] # %d # %d",
name[lis], school[lis], &score[lis], &dis[lis]) == 4)
lis++;
fclose(op);
return lis;
请注意,我还将字符串限制为适合数组的大小,并返回已读取的学生数。
最后,就目前而言,我会发现read()
并不是一个特别好的名字选择。虽然它是由标准C为用户保留的,但在POSIX系统上,read()
是系统调用。更好的名称可能是read_students()
。