我是C編程新手(這是我的第一語言),我不擅長英文,所以對於語法感到抱歉...順便說一句,我想知道你是否可以幫助我: 我必須從文件中讀取數組的組件,將它們設置爲它的一部分,並將它們看作屏幕上的輸出。 我創建了這個信息文件:如何正確使用fscanf和fgets從文件中讀取
羅西,馬里奧,男,mariorossi @ gmail.com,3923333332,門簾 比安奇,朱塞佩,男,giuseppebianchi @ gmail.com,3470000021,Attaccante 法拉利,安娜,F,annaferrari @ gmail.com,3466482645,Attaccante 羅馬諾,安東尼奧,男,antonioromano @ gmail.com,3450394672,Centrocampista
,並試圖編碼我結束了與此:
#include <stdio.h>
#include <stdlib.h>
struct dati_giocatori {
char cognome[20];
char nome[20];
char genere[20];
char email[20];
int telefono;
char ruolo[20];
};
typedef struct dati_giocatori GIOCATORE;
void lettura(FILE *file, GIOCATORE *vettore, int dim);
void stampa(GIOCATORE *vettore, int dim);
int main(){
FILE *file;
GIOCATORE *vettore;
int dim;
vettore=(GIOCATORE*)malloc(dim*sizeof(GIOCATORE));
printf("how many players do you want to see?");
scanf("%d",&dim);
file=fopen("Giocatori.txt","r");
lettura(file,vettore,dim);
stampa(vettore,dim);
system("pause");
return 0;
}
void lettura(FILE *file, GIOCATORE *vettore, int dim){
int i=0;
if(file){
while(!feof(file) && i<dim){
fscanf(file,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],[^\n]", vettore[i].cognome,vettore[i].nome,vettore[i].genere,vettore[i].email,&vettore[i].telefono,vettore[i].ruolo);
i++;
}
}
else{
printf("Error.");
}
}
void stampa(GIOCATORE *vettore, int dim){
int i=0;
while(i<dim){
printf("%s,%s,%s,%s,%d,%s\n", vettore[i].cognome,vettore[i].nome,vettore[i].genere,vettore[i].email,vettore[i].telefono,vettore[i].ruolo);
i++;
}
}
但它不工作得很好。我知道我對fscanf有一些問題(可能),並且我想知道malloc是否被正確使用了...你能幫助我嗎?我犯的錯誤在哪裏?我該如何解決它們?代碼應該如何使用fgets而不是fscanf?我是否以正確的方式使用分隔符?
好的,非常感謝你的回覆,我會用一個長變量來對待這個10位數的電話號碼,但是我仍然不知道如何正確使用fscanf。這是第一次使用分隔符,這讓我感到困惑。我的格式說明符是「%s,%s,%s,%s,%ld,%s」,對嗎?但我應該如何將它們放入fscanf?我在fscanf的參數「file」之後寫什麼?
您不能對'int'使用'%[^,]'。所以E.g'int telefono;' - >'char telefono [16];' – BLUEPIXY
是的,將電話號碼存儲爲字符串。常規的32位帶符號整數不能保存您的電話號碼:3,450,394,672大於2 3¹= 2,147,483,648。 –
非常感謝你的答覆,我得到了「int telefono」的問題,但我仍然沒有得到正確的形式fscanf與demitators,我應該在第一個參數「文件」的fscanf? – Varkas