int main()
{
char a[100][100];
int i = 0, k = 0;
FILE* file = fopen("A:/input.txt", "r");
if(file == NULL){
perror("Error opening file !\n");
} else {
while(! feof(file)){
fscanf(file, "%d;%s\n", &i, a[i]);
}
}
for(; k < i; ++k){
printf("%d -> %s\n", k, a[k]);
}
return 0;
}
我有這個代碼的工作片,我試圖實現它作爲這樣一個功能:如何從文件函數中進行工作讀取?
int reader(char b[20], char *a[100][100], int *i){
int j = 0;
FILE* file = fopen(b, "r");
if(file == NULL){
perror("Error opening file !\n");
} else {
while(! feof(file)){
fscanf(file, "%d;%s\n", j, a[j]);
}
}
*i = j;
return 0;}
,並從主的電話:
char a[100][100];
int i = 0;
reader("Type.txt", &a, &i);
但是當我使用函數,代碼在fscanf調用時崩潰。 任何ideea我如何使這項工作或如何創建一個函數,從文件中逐行讀取並創建一個數組在這種形式:array [0] = firstline,array [1] = secondline等
這裏有無數的問題。 'reader()'接口中的'char * a [100] [100]'可能不是您想要的或意思;那麼你沒有正確使用它。該設計只能讀取最多100行,並且只有每行少於100個字符。 'while(!feof(file))'符號是Pascal編程的一個(糟糕!)解酒;這是不好的C代碼,永遠。你不檢查'fscanf()'的返回值。你不會在掃描循環中增加'j',所以你一直覆蓋同一行。你不關閉在'reader()'中打開的文件。在'main()'中,你不會在循環中增加'i'。 – 2013-04-05 16:39:22
在我正在閱讀數據的文件是存儲這樣的ID;名稱,這就是爲什麼我不增加我因爲我直接從文件讀取它,我讀取ID並將名稱放入數組[id]。 – CristiDeac 2013-04-05 20:24:14
你不能那樣做。在調用'scanf()'之前確定'''用於索引'array'的值。然後你用讀取更新'j'。下一個輸入進入前一個輸入的索引讀取。我確實在想,這是不是你想要的,但我想「不,不可能,可以嗎?」你從編譯器得到了多少警告?你應該從'reader()'函數中得到一些(我得到兩個:'格式'%d'需要'int *'類型的參數,但參數3的類型'int'和'格式'%s'預計類型'char *'的參數,但參數4的類型爲'char **')。 – 2013-04-05 21:15:22