user-0 提问: 如何将文件中的数据按要求存入数组中

回复:
user: user-0
content: 引用 12 楼 darren4567 的回复:[quote=引用 11 楼 bigwatercar 的回复:] [quote=引用 9 楼 darren4567 的回复:] [quote=引用 4 楼 bigwatercar 的回复:]  #include <stdio.h>  int main(void) {     FILE *fp = NULL;     float a[10][5];     int i, j;     int end = 0;      fp = fopen("srcfile", "r");     if (NULL == fp)     {         perror("openfile failed.\n");         return -1;     }      for (i = 0; i < 10 && !end; i++)     {         for (j=0; j<5; j++)         {             if (-1 != fscanf(fp, "%e", &a[i][j]))             {                 printf("%e\t", a[i][j]);             }             else             {                 end = 1;                 break;             }         }         printf("\n");     }     fclose(fp);      return 0; }     写了一段测试代码，无问题。 gcc 4.8.4   您好，如果我想用atof函数将数组中的每一个字符转换为double变量的话直接写 printf("%d\t",atof(&a[i][j]));  行吗？  stdlib.h文件已加的情况下[/quote]  atof是将字符串转浮点数。那你就得按字符串读取。 你这数组设计的也不对了，得三维数组。   话说你说了这么久也没见你把错误提示贴出来，别人都是猜猜猜。  至少先说下你的编译环境，如何出错，出了什么错。这样别人才能帮你。[/quote]   我试着编写了下面的程序 #include <stdio.h> #include <stdlib.h> int main(void) {     FILE *fp ;     double a[10000][5];     double b[10000][5];     int i,j,k,l;       fp = fopen("G:\\云CT\\多能云CT - 扫描部分\\140KVSingles_0.txt", "r");     if (NULL == fp)     {         printf("openfile failed.\n");         return -1;     }    for(k=0,i=0;(k<10000)&&(i<10000);k++,i++)     {         for(l=0,j=0;(l<5)&&(j<5);l++,j++)         {             if (-1 != fscanf(fp, "%d", &a[i][j])) { b[k][l]=atof(&a[i][j]); printf("%d\t", b[k][l]);}         }         printf("\n");     }     fclose(fp);       return 0; }	        我用的是C语言编译环境，用完这个程序执行后出现这个情况    转换后的数大部分都是0  还有atof函数 只能转换字符串吗？如果要转换字符数组里的字符串的话应该怎么转换？  C语言新手，请多多指教。[/quote]  用的是VC++ 6.0环境

user: user-0
content: 引用 11 楼 bigwatercar 的回复:[quote=引用 9 楼 darren4567 的回复:] [quote=引用 4 楼 bigwatercar 的回复:]  #include <stdio.h>  int main(void) {     FILE *fp = NULL;     float a[10][5];     int i, j;     int end = 0;      fp = fopen("srcfile", "r");     if (NULL == fp)     {         perror("openfile failed.\n");         return -1;     }      for (i = 0; i < 10 && !end; i++)     {         for (j=0; j<5; j++)         {             if (-1 != fscanf(fp, "%e", &a[i][j]))             {                 printf("%e\t", a[i][j]);             }             else             {                 end = 1;                 break;             }         }         printf("\n");     }     fclose(fp);      return 0; }     写了一段测试代码，无问题。 gcc 4.8.4   您好，如果我想用atof函数将数组中的每一个字符转换为double变量的话直接写 printf("%d\t",atof(&a[i][j]));  行吗？  stdlib.h文件已加的情况下[/quote]  atof是将字符串转浮点数。那你就得按字符串读取。 你这数组设计的也不对了，得三维数组。   话说你说了这么久也没见你把错误提示贴出来，别人都是猜猜猜。  至少先说下你的编译环境，如何出错，出了什么错。这样别人才能帮你。[/quote]   我试着编写了下面的程序 #include <stdio.h> #include <stdlib.h> int main(void) {     FILE *fp ;     double a[10000][5];     double b[10000][5];     int i,j,k,l;      fp = fopen("G:\\云CT\\多能云CT - 扫描部分\\140KVSingles_0.txt", "r");     if (NULL == fp)     {         printf("openfile failed.\n");         return -1;     }  for(k=0,i=0;(k<10000)&&(i<10000);k++,i++)     {         for(l=0,j=0;(l<5)&&(j<5);l++,j++)         {             if (-1 != fscanf(fp, "%d", &a[i][j])) { b[k][l]=atof(&a[i][j]); printf("%d\t", b[k][l]);}         }         printf("\n");     }     fclose(fp);       return 0; }	      我用的是C语言编译环境，用完这个程序执行后出现这个情况    转换后的数大部分都是0  还有atof函数 只能转换字符串吗？如果要转换字符数组里的字符串的话应该怎么转换？  C语言新手，请多多指教。

user: user-1
content: 引用 9 楼 darren4567 的回复:[quote=引用 4 楼 bigwatercar 的回复:]  #include <stdio.h>  int main(void) {     FILE *fp = NULL;     float a[10][5];     int i, j;     int end = 0;      fp = fopen("srcfile", "r");     if (NULL == fp)     {         perror("openfile failed.\n");         return -1;     }      for (i = 0; i < 10 && !end; i++)     {         for (j=0; j<5; j++)         {             if (-1 != fscanf(fp, "%e", &a[i][j]))             {                 printf("%e\t", a[i][j]);             }             else             {                 end = 1;                 break;             }         }         printf("\n");     }     fclose(fp);      return 0; }     写了一段测试代码，无问题。 gcc 4.8.4   您好，如果我想用atof函数将数组中的每一个字符转换为double变量的话直接写 printf("%d\t",atof(&a[i][j]));  行吗？  stdlib.h文件已加的情况下[/quote]  atof是将字符串转浮点数。那你就得按字符串读取。 你这数组设计的也不对了，得三维数组。   话说你说了这么久也没见你把错误提示贴出来，别人都是猜猜猜。  至少先说下你的编译环境，如何出错，出了什么错。这样别人才能帮你。

user: user-2
content: 引用 16 楼 bigwatercar 的回复:[quote=引用 14 楼 zhao4zhong1 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] http://bbs.csdn.net/topics/360055953 引用 8 楼 zhao4zhong1 的回复:static int a[50000][5]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 无视我回帖的坛友一般都会浪费一大段青春。[/quote]  我也觉得，哎，可怜楼主抄都抄不对。[/quote]

user: user-1
content: 引用 18 楼 darren4567 的回复:[quote=引用 15 楼 bigwatercar 的回复:] 你的数组定义的是double，你格式化读取的时候就要按double读。 格式化读取的 时候也是double读的啊？我的程序有什么问题吗？ [/quote]  你不再检查一下你的fscanf的第二个参数吗？

user: user-0
content: 引用 15 楼 bigwatercar 的回复:你的数组定义的是double，你格式化读取的时候就要按double读。 格式化读取的 时候也是double读的啊？我的程序有什么问题吗？

user: user-0
content: 引用 14 楼 zhao4zhong1 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] http://bbs.csdn.net/topics/360055953 引用 8 楼 zhao4zhong1 的回复:static int a[50000][5]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 无视我回帖的坛友一般都会浪费一大段青春。[/quote]  不好意思了，谢谢回答！

user: user-1
content: 引用 14 楼 zhao4zhong1 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] http://bbs.csdn.net/topics/360055953 引用 8 楼 zhao4zhong1 的回复:static int a[50000][5]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 无视我回帖的坛友一般都会浪费一大段青春。[/quote]  我也觉得，哎，可怜楼主抄都抄不对。

user: user-1
content: 你的数组定义的是double，你格式化读取的时候就要按double读。

user: user-2
content: 引用 5 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/360055953 引用 8 楼 zhao4zhong1 的回复:static int a[50000][5]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 无视我回帖的坛友一般都会浪费一大段青春。

user: user-3
content: 你的是浮点数，应该用double或者float变量来接收，而不是int

user: user-2
content: http://bbs.csdn.net/topics/360055953

user: user-1
content: #include <stdio.h>  int main(void) {     FILE *fp = NULL;     float a[10][5];     int i, j;     int end = 0;      fp = fopen("srcfile", "r");     if (NULL == fp)     {         perror("openfile failed.\n");         return -1;     }      for (i = 0; i < 10 && !end; i++)     {         for (j=0; j<5; j++)         {             if (-1 != fscanf(fp, "%e", &a[i][j]))             {                 printf("%e\t", a[i][j]);             }             else             {                 end = 1;                 break;             }         }         printf("\n");     }     fclose(fp);      return 0; }     写了一段测试代码，无问题。 gcc 4.8.4

user: user-1
content: float a[50000][5];

user: user-0
content: 引用 1 楼 bigwatercar 的回复:for(i=0;i<50000;i++) {     fgets(fp, buf);  for(j=0;j<5;j++) { fscanf(fp,"%e",&a[i][j]); } fscanf(fp,"\n"); }   试一下    会出现错误提示，程序运行不了

user: user-1
content: for(i=0;i<50000;i++) {     fgets(fp, buf);  for(j=0;j<5;j++) { fscanf(fp,"%e",&a[i][j]); } fscanf(fp,"\n"); }   试一下

user: user-0
content: 引用 4 楼 bigwatercar 的回复: #include <stdio.h>  int main(void) {     FILE *fp = NULL;     float a[10][5];     int i, j;     int end = 0;      fp = fopen("srcfile", "r");     if (NULL == fp)     {         perror("openfile failed.\n");         return -1;     }      for (i = 0; i < 10 && !end; i++)     {         for (j=0; j<5; j++)         {             if (-1 != fscanf(fp, "%e", &a[i][j]))             {                 printf("%e\t", a[i][j]);             }             else             {                 end = 1;                 break;             }         }         printf("\n");     }     fclose(fp);      return 0; }     写了一段测试代码，无问题。 gcc 4.8.4  我试着编写了下面的程序 #include <stdio.h> #include <stdlib.h> int main(void) {     FILE *fp ;     double a[10000][5];     double b[10000][5];     int i,j,k,l;      fp = fopen("G:\\云CT\\多能云CT - 扫描部分\\140KVSingles_0.txt", "r");     if (NULL == fp)     {         printf("openfile failed.\n");         return -1;     }  	for(k=0,i=0;(k<10000)&&(i<10000);k++,i++)     {         for(l=0,j=0;(l<5)&&(j<5);l++,j++)         {             if (-1 != fscanf(fp, "%d", &a[i][j])) 			{ b[k][l]=atof(&a[i][j]); 				printf("%d\t", b[k][l]);}         }         printf("\n");     }     fclose(fp);       return 0; }	  然后出来的都是0  请问问题出在哪？

user: user-0
content: 引用 4 楼 bigwatercar 的回复: #include <stdio.h>  int main(void) {     FILE *fp = NULL;     float a[10][5];     int i, j;     int end = 0;      fp = fopen("srcfile", "r");     if (NULL == fp)     {         perror("openfile failed.\n");         return -1;     }      for (i = 0; i < 10 && !end; i++)     {         for (j=0; j<5; j++)         {             if (-1 != fscanf(fp, "%e", &a[i][j]))             {                 printf("%e\t", a[i][j]);             }             else             {                 end = 1;                 break;             }         }         printf("\n");     }     fclose(fp);      return 0; }     写了一段测试代码，无问题。 gcc 4.8.4   您好，如果我想用atof函数将数组中的每一个字符转换为double变量的话直接写 printf("%d\t",atof(&a[i][j]));  行吗？  stdlib.h文件已加的情况下

user: user-2
content: static int a[50000][5]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

user: user-4
content: 栈的大小一般可以通过编译器开关/STACK:设置，不然默认的是 1 MB 你的数组就占了1MB了