读取 txt 文件时出错,无法正确读取 txt 文件

Error when reading txt file, can't read txt file correctly

本文关键字:读取 文件 txt 出错      更新时间:2024-05-11

我写了一个程序来从txt文件(大学数据(中获取数据,(主题需要使用txt文件(
我不明白为什么我的程序运行错误,在第一个循环中它仍然给出正确的结果,下次它失败时

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
struct age{
char id[10];
char name[50];
int numb;
int score;
};
int main(){
age dnu[20];
char x[50];
int d;
int n;
FILE *f;
f = fopen("ex3","r");
if(f==NULL){
printf("Error");
exit(0);
}
//  if( fgets(x,60,f)!=NULL){
//      puts(x);
//  }

fscanf(f,"%d",&n);  
for(int i=0;i<1;i++){
fscanf(f," %s ",&dnu[i].id);
fscanf(f," %s ",&dnu[i].name);
fscanf(f,"%d",&dnu[i].numb);
fscanf(f,"%d",&dnu[i].score);
}
printf("%10s    %20s    %20s    %20s","majors","Name majors","number of students ","matriculation scoren");
for(int i=0;i<n;i++){
printf("%10s    %20s    %20d    %20d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score);
printf("n");
}
fclose(f);
}

这是txt文件中的所有内容

2
IT
Technology 
4252
27
SEO
Search Engine 
3421
30

这是图像在此处输入图像描述

这是正确的代码

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
void delete_n(char a[]){
size_t x=strlen(a);
if(a[strlen(a)-1]=='n'){
a[strlen(a)-1]='';
}
}
struct age{
char id[10];
char name[50];
int numb;
int score;
};
int main(){
age dnu[20];
char x[50];
char xx[50];
int d;
int n;
FILE *f;
f = fopen("ex3","r");
if(f==NULL){
printf("Error");
exit(0);
}
//  if( fgets(x,60,f)!=NULL){
//      puts(x);
//  }

if(fgets(x,50,f)!=NULL){
//          printf("%s",x);
}
n=atoi(x);
//  printf("===%d===",n);
for(int i=0;i<n;i++){
if(fgets(dnu[i].id,10,f)!=NULL){
//          printf("%s",dnu[i].id);
}
if(fgets(dnu[i].name,50,f)!=NULL){
//          printf("%s",dnu[i].name);
}
//      fscanf(f," %[^n]s ",&dnu[i].name);

if(fgets(x,50,f)!=NULL){
//          printf("%s",x);
}
dnu[i].numb=atoi(x);
if(fgets(xx,50,f)!=NULL){
//          printf("%s",xx);
}
dnu[i].score=atoi(xx);
}
//  printf("===%s==",x);
printf("%10s    %20s    %20s    %20s","majors","Name majors","number of students ","matriculation scoren");
for(int i=0;i<n;i++){
delete_n(dnu[i].id);
delete_n(dnu[i].name);
printf("%10s    %20s    %20d    %20d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score);
printf("n");
}
fclose(f);
}

对不起我的英语好的,提问者的代码不能正常运行,因为读取文件的程序默认为字符串,所以您需要使用脚本将字符串转换为整数变量atoi(x1 ,x2)