我必须从文件中读取多条记录(记录的每个组成部分用逗号分隔),我无法理解问题是什么,所以这里是我的文件:
Rossi,Mario,M,mariorossi @ gmail.com,3923333332,Portiere Bianchi,Giuseppe,M,giuseppebianchi @ gmail.com,3470000021,Attaccante Ferrari,Anna,F,annaferrari @ gmail.com,3466482645,Attaccante Romano,安东尼奥,男,antonioromano @ gmail.com,3450394672,Centrocampista
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct dati_giocatori {
char cognome[20];
char nome[20];
char genere[20];
char email[50];
char telefono[16];
char ruolo[20];
};
typedef struct dati_giocatori GIOCATORE;
void stampa_file(FILE *pfile, GIOCATORE *vettore, int dim, char *stringa);
int main (){
FILE *pfile;
GIOCATORE *vettore;
int dim=0;
char stringa[200];
printf("Quanti giocatori vuoi visualizzare?");
scanf("%d",&dim);
vettore=(GIOCATORE*)malloc(dim*sizeof(GIOCATORE));
pfile=fopen("Giocatori.txt","r");
stampa_file(pfile,vettore,dim,stringa);
system("pause");
fclose(pfile);
pfile=fopen("Giocatoriv.txt","r");
system("pause");
free(vettore);
fclose(pfile);
system("pause");
return 0;
system("pause");
}
void stampa_file(FILE *pfile, GIOCATORE *vettore, int dim, char *stringa){
int i=0;
int j=0;
if(pfile!=NULL){
if(!feof(pfile)){
while(i<dim){
if(!feof(pfile)){
fgets(stringa,200,pfile);
sscanf(stringa,"%[^,],%[^,],%[^,],%[^,],%[^,],%s",vettore[i].cognome,vettore[i].nome,
vettore[i].genere,vettore[i].email,vettore[i].telefono,vettore[i].ruolo);
i++;
}
else{
printf("\n----- Giocatori finiti -----\n");
printf("\n");
i=dim;
}
}
}
else{
printf("\nFile finito.\n");
}
}
else{
printf("Errore nell'apertura del file.\n");
printf("\n");
}
while(j<dim){
printf("%s,%s,%s,%s,%s,%s\n",vettore[j].cognome,vettore[j].nome,
vettore[j].genere,vettore[j].email,vettore[j].telefono,vettore[j].ruolo);
j++;
}
system("pause");
}
我知道问题在于sscanf()
,因为它在屏幕上打印的只是每条记录的第一个组成部分,还有五个逗号,但我无法弄清楚如何解决这个问题......它没有将正确的数据分配到记录上的正确位置,sscanf()
格式是否正确?我对分隔符不是很熟悉,我应该怎么解决这个问题?
感谢大家的帮助。对不起,你等了很长时间才得到回复,但我昨天无法编辑。我也非常抱歉发布错误,我是堆栈溢出的新手,我也是C的新手(这是我的第一语言)...(并且只是为了制作对我来说很难,我也不是一个母语人士,你可以通过我的语法错误注意到)。 是的,电子邮件地址是假的。 顺便说一下,老实说,我不知道在每条记录的末尾都检查文件是否有换行符......在写文件的过程中,我认为按下&#34;输入&#34;会给我一个换行符,但读你的评论我不再确定了。我想在每条记录的末尾使用换行符,但我该怎么做?这会使我的代码工作吗? (我第二次打开文件,因为我只是尝试了其他的东西,所以请不要介意,系统暂停也一样。)
答案 0 :(得分:1)
好的,首先下次提出您的问题,特别是您的代码更具可读性(您必须正确使用缩进)。我不明白你为什么以错误的方式使用这么多type t = int * (unit -> t) list
。您还会投射system("pause");
和you should not do it的结果。你打开文件,然后使用它,关闭它并打开一个新文件,什么都不做,所以我删除了它。请注意,使用while (!feof(file))
is always wrong。然后在vettore=(GIOCATORE*)malloc(dim*sizeof(GIOCATORE));
函数中我做了很多更改。
这是代码。
stampa_file
这是我用于测试的文件:
罗西,马里奥,M mariorossi @ gmail.com,3923333332,门帘 比安奇,朱塞佩,男,giuseppebianchi @ gmail.com,3470000021,Attaccante 法拉利,安娜,F,annaferrari @ gmail.com,3466482645,Attaccante 罗马诺,安东尼奥,男,antonioromano @ gmail.com,3450394672,Centrocampista