打印包含字符串和整数的文件,C程序
首先,对不起我的英语不好 所以我有一个包含多个字符串和整数的文件 文件内容是打印包含字符串和整数的文件,C程序,c,file,scanf,C,File,Scanf,首先,对不起我的英语不好 所以我有一个包含多个字符串和整数的文件 文件内容是 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");
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);
}
#包括
字名[10][20],学校[10][20];;
int op=0,得分[8],dis[8];
int read(){
文件*op=fopen(“test.txt”、“r”);
而(fscanf(op,“%[^#]%[^#][d#%d”,名称[lis],学校[lis],分数[lis],dis[lis])!=EOF)
lis++;
fclose(op);
}
它会崩溃吗?你能告诉我正确的方法吗?你的数组大小不同(有些是8个,有些是10个元素长)。您应该检查是否没有溢出最短的数组。所示代码未编译,因为变量
lis
未定义-如果已定义,则需要确保已将其初始化为0
您的代码也有误导性,因为您有一个全局变量int op=0
然后在read()
函数中有文件*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;
int-lis=0;
而(lis<8&&fscanf(op),"%19[^#][19[^#][d#%d",,
名称[lis]、学校[lis]、&score[lis]、&dis[lis])==4)
lis++;
fclose(op);
返回lis;
注意,我还将字符串限制为适合数组的大小,并返回读取的学生数
最后,就目前而言,我将注意到
read()
不是一个特别好的名称选择。虽然标准C为用户保留了它,但在POSIX系统上,read()
是一个系统调用。更好的名称可能是read_students()
查找程序崩溃原因的最简单方法是使用符号信息(例如,gcc的-g
)对其进行编译,并在调试器中运行。但这里有一些可能导致崩溃的提示:lis
定义在哪里?它是否初始化为零?为什么你有10个名字和铲子,但只有8分?为什么不检查lis
是否超过8(或10,或上限是多少)?为什么不使用%19[^#]
将读取的字符串限制为19+1个空字符?另外,您的fscanf
调用可以返回从EOF
到0到4的任何数字。什么是lis
。你在哪里申报?