我是C編程新手,我想嘗試從CSV文件讀取並將其打印出來。我的CSV文件中的格式:從具有結構數組的CSV文件讀取
指數,國家,年死亡率
1世界
50s 36
60s 29
70s 22
2非洲
50s 34
209湯加
50s 49
60s 67
等等......
我不知道如何閱讀我的CSV文件的末尾,所以我的代碼輸出只打印到索引143,而我當前的CSV文件打印到204.任何人都可以用這個指導我嗎?
void readRecords(){
FILE *fptr;
int i,j,k;
char line[200], hold[10];
if((fptr=fopen("data.csv","r"))==NULL){
printf("Cannot open input file data.csv\n");
}
else{
for(i=0;i<999;i++){
fgets(line, 200, fptr);
j=0;
k=0;
while (line[j] != ','){ // This while loop extract the country name until a comma is detected
hold[k++] = line[j++]; // Simply copy all character from each line to the country
}
hold[k]='\0';
myRecords[i].index=atoi(hold);
j++;
k=0;
while (line[j] != ','){ // This while loop extract the country name until a comma is detected
myRecords[i].country[k++] = line[j++]; // Simply copy all character from each line to the country
}
myRecords[i].country[k]='\0';
j++;
k=0;
while (line[j] != ','){ // This while loop extract the country name until a comma is detected
hold[k++] = line[j++]; // Simply copy all character from each line to the country
}
hold[k]='\0';
myRecords[i].year=atoi(hold);
j++;
k=0;
while (line[j] != ','){ // This while loop extract the country name until a comma is detected
hold[k++] = line[j++]; // Simply copy all character from each line to the country
}
hold[k]='\0';
myRecords[i].deathrate=atoi(hold);
j++;
}
}
fclose(fptr);
}
我想使用EOF來讀取CSV文件的末尾,但我不知道如何實現它。 –
當文件結束時,'fgets'返回NULL。檢查並從循環中分離出來。一般來說,所有的文件讀取函數都有一個特殊的返回值,表示文件的結尾,通常是NULL或特殊(整數)值EOF。 –
另外,小心不要溢出'hold'。10個字符應該足以保存整數,但是對於外部輸入,您不能依賴它。 –