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