【发布时间】:2017-06-01 15:23:16
【问题描述】:
我必须从一个文件中读取多条记录(记录的每个组成部分用逗号分隔),我无法理解问题所在,所以这是我的文件:
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, Antonio,M,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 的新手(这是我的第一语言)......(只是为了让我很难,我也不是您可以通过我的语法错误注意到的母语人士)。 是的,电子邮件地址是假的。 顺便说一句,老实说,我不知道检查文件是否在每条记录的末尾都有换行符......在编写文件时,我认为按“回车”会给我换行符,但读你的 cmets 我不确定了。我想在每条记录的末尾使用换行符,但我该怎么做呢?而且,这会让我的代码工作吗? (我第二次打开该文件,因为我只是在尝试其他操作,所以请不要介意,系统暂停也是如此)。
【问题讨论】:
-
你对
if (!feof(...))的使用并不比while (!feof(...))、which is wrong好。 -
我希望您在示例文件中发布了虚假的电子邮件地址...
-
每条记录的末尾是否有换行符? (您发布的内容中没有)。
-
文件是否包含换行符?
-
发布使用的确切输入和看到的确切输出。