问题描述
- 关于C语言按行读取文件,读取其中数字,挨个转换成doube类型,存入数组
-
int main()
{
FILE *fp;
char buffer[50];
char filename[50];
int bufferLen;
int i;
int j = 0;
char c;
double c_number[50];printf("Input file name: "); scanf("%s", filename); if((fp = fopen(filename, "rb")) == NULL) { return -1; } while(fgets(buffer, 50, fp)) { for(i = 0; i < 50; i++) { c = buffer[i]; if(c != ' ' && c != 'n' && c != 'r') //这里过滤,读取数字,文件有符号,空格什么的 { c_number[j] = (double)atof(c); //这里想挨个转换double没有成功 //sscanf(c, "%lf", c_number[j]); j++; } } } fclose(fp);
解决方案
- while(fgets(buffer, 50, fp)) 一直读取? 好像应该是while(fgets(buf,50,fp) != NULL)
- fgets得到的是一个字符指针,不一定是一个字符,是一行字符,根据你的要求,最多读取49个,因为最后一个''
所以得到的buffer是一行数据,也就是buffer可能是一个double数据,而不是c - 读取的字符数组buffer含49个字符加一个空字符,你用for循环赋值,那没有通过fgets得到内容(例如读取53.25),那么后边内容是什么?随机?
你把后边内容同样给c,好像没有意义吧,应该加判断 if (buffer[i] == ''). - 看你数组都用的50,你是想要读取50行,也就是读取50个double? 那应该是50次(fgets(buffer, count, fp),其中count是你要读取的最大double字符数加1或更大。
解决方案二:
调试下,目测atof(c),而c是单个字符,这是不行的。最好用split函数切割成字符串,字符串才能解析为浮点数
解决方案三:
为什么不直接用fscanf
解决方案四:
恩 c为char 占 1个字节 double占8个字节
解决方案五:
恩 c为char 占 1个字节 double占8个字节
解决方案六:
把c定义成 char c[2] = {0};
这里 c[0] = buffer[i];
然后就可以 c_number[j] = (double)atof(c);
解决方案七:
http://blog.csdn.net/hong__fang/article/details/43488265 C语言方法和C++相同
时间: 2024-10-01 13:32:49