c语言从TXT文件读取数据存入二维数组的程序如下,哪错了?

#include <stdio.h>
#include <string.h>
#define MAXLINE 788
#define MAXCOLUMN 2
void main(void){
FILE *fp; //文件指针
char arr[MAXLINE][MAXCOLUMN]={0}; //定义788行2列的二维数组并初始化
int i = -1;
if((fp=fopen("d:\\plot\\A.txt","r"))==NULL){ //打开txt文件
perror("File open error!\n");
return;
}
while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组,百度fgets
printf("%d: ",i); //打印行号
//puts(arr[i]);
char *subarr = strtok(arr[i]," "); //以空格为分隔符从arr[i]中获得字串,百度strtok
while(subarr!=NULL){
data[i][j] = atoi(subarr); //将字串转为int型数据存入data数组
printf("%d\t",data[i][j]); //打印data[i][j
subarr = strtok(NULL," "); //继续获得arr[i]中的字串
j++; //data数组列加一
}
printf("\n");
}
//循环完毕后,所有数据已在data数组中
printf("\n");
fclose(fp); //关闭指针
}
TXT文件部分数据如下:1000 243600
-10000 301000
-100200 246000
-100200 322400
-101200 122800
-101324 265174
-101324 268324
-101324 271474
-101324 274623
-101324 277773
-101324 284072
-101324 287222
-101324 293521
-101324 296670
-101324 299820
-101400 306200
-101400 315600
…………………………

第1个回答  2012-08-03
格式很重要....一旦移错了就可能出错.....
第2个回答  2012-07-25
额 出了什么错啊。一大堆代码,有个目标也好找啊追问

c:\documents and settings\administrator\aa.c(16) : error C2143: syntax error : missing ';' before 'type'
c:\documents and settings\administrator\aa.c(18) : error C2065: 'subarr' : undeclared identifier
c:\documents and settings\administrator\aa.c(18) : warning C4047: '!=' : 'int ' differs in levels of indirection from 'void *'
………………
aa.obj - 14 error(s), 3 warning(s)

追答

#include
#include
!!!!!!#include //那个atoi那个函数的头文件,以后查函数的话,把头文件也查一下
#define MAXLINE 788
#define MAXCOLUMN 2
void main(void){
FILE *fp; //文件指针
char arr[MAXLINE][MAXCOLUMN]={0}; //定义788行2列的二维数组并初始化
!!!!! int data[MAXLINE][MAXCOLUMN]={0}; //data数组未定义。
int i = -1;//!!!!!!!!!!!!!其实用i=0也是可以的下面的++i换成i++就好了
!!!!!!! int j=0;//忘记定义j了。
if((fp=fopen("d:\\plot\\A.txt","r"))==NULL){ //打开txt文件
perror("File open error!\n");
return;
}
while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组,百度fgets
printf("%d: ",i); //打印行号
//puts(arr[i]);
char *subarr = strtok(arr[i]," "); //以空格为分隔符从arr[i]中获得字串,百度strtok
while(subarr!=NULL){
data[i][j] = atoi(subarr); //将字串转为int型数据存入data数组
printf("%d\t",data[i][j]); //打印data[i][j
subarr = strtok(NULL," "); //继续获得arr[i]中的字串
j++; //data数组列加一
}
printf("\n");
!!!!!!! }//这里的{多余了,还是说是这个(while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组,百度fgets)里的,是的话就在前面加上吧
//循环完毕后,所有数据已在data数组中
printf("\n");
fclose(fp); //关闭指针
}

语法错误的好像就这些了,不过啊,程序还是错了的

char arr[MAXLINE][MAXCOLUMN]={0}; //定义788行2列的二维数组并初始化
你是从文件里读取字符串的啊,不是读取一个字符,这样子的声明只是读取一个字符而已啊。

追问

C:\Documents and Settings\Administrator\aa.c(19) : error C2143: syntax error : missing ';' before 'type'
C:\Documents and Settings\Administrator\aa.c(20) : error C2065: 'subarr' : undeclared identifier
^^^^^^^^^^^^^^
aa.obj - 7 error(s), 4 warning(s)

追答

话说 这里的
while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组,百度fgets
问题修改了吗,那里有个大括号不匹配。

要不程序贴出来吧,嗯用私信吧,据说追问过多要扣分的

追问

你邮箱

追答

去你的消息里看看 就在那里发吧,邮箱什么的不太上啊
刚刚看了下用fscanf会比较好吧。

参考资料:http://baike.baidu.com/view/656694.htm

本回答被网友采纳
相似回答