c语言读取txt文件并存入一个一维数组

BuDaozhe 2013-08-08 09:43:36
源txt文件:
330
100 99.9 99.1 86 86 89 88 86 90 88 92 85 80 81 84 83 85 90 87 88 89 88 84 84 87 87 89 92 91 87 91 87 81 86 88 86 85 91 83 100 89 89 85 81 81 86 87 89 92 86 87 90 84 83 90 87 90 89 97 93 92 93 85 79 85 91 87 87 84 87 83 82 89 85 83 86 85 86 87 91 89 85 88 90 85 84 90 89 92 90 95 94 86 94 83 83 82 90 94 91 88 88 85 84 86 83 84 85 85 85 85 85 89 86 86 88 85 88 83 86 88 93 94 99 93 90 89 89 90 83 82 77.90 90 91 87 89 84 83 85 87 83 86 87 90 83 88 90 88 88 85 85 85 88 83 86 88 90 95 100 94 94 93 93 94 86 81 81 85 91 88 88 82 85 84 88 85 85 87 88 88 86 88 85 86 88 81 84 82 85 89 91 87 94 95 89 91 90 88 88 86 87 80 79 81 78 83 84 86 84 83 84 84 87 86 87 86 85 86 90 86 90 87 87 81 81 87 88 88 89 98 96 89 89 92 93 92 89 85 83 80 82 82 84 81 78 84 84 83 81 82 84 86 87 87 89 91 87 85 87 84 85 81 85 87 90 93 93 96 94 88 88 91 90 89 89 89 80 84 83 80 80 83 82 80 82 82 87 84 88 88 91 87 88 91 88 87 86 87 87 86 87 82 86 90 91 96 91 95 91 94 90 93 92 86 88 80 82 81 84 81 84 83 87 80 78 77.01 81 86 91 90
int num;
int i=0,j=0;

fscanf(fp1,"%d",&num);
//float *a = (float*)malloc(sizeof(float)* num);
float *a = new float[num];

for(i=0;i<num;i++)
{
fscanf(fp1,"%f",&a[i]);
}
为什么每次输出a[i]都是乱码,数据没有读进去?
...全文
5914 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
OnePeace888 2013-08-14
  • 打赏
  • 举报
回复
引用 6 楼 lpcads 的回复:
为什么我的正常?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int num = 0;
	float a[5]={0};
	FILE* fp1 = fopen("d:\\tr\\a.txt","r");
	
	if(fp1==NULL)
		return 1;

	fscanf(fp1,"%d",&num);
	for(int i=0;i<5;++i)
		fscanf(fp1,"%f",&a[i]);
	fclose(fp1);

	return 0;
}
return 0;前的断点
确实可以的
shiguojie19892 2013-08-14
  • 打赏
  • 举报
回复
我在《21天学通c++》里面看过读取文本的介绍,这本书写的很详细,里面介绍了各种读取文本的函数使用方法。从入门语法到后面的数据结构都有介绍。
OnePeace888 2013-08-14
  • 打赏
  • 举报
回复

INT ReadDataToArrayFromFile(VOID)
{
	FILE *fp;
	//float readValue[TEST_ARRAY_LENGTH]={0};	
	float *pfMalloc=NULL,*pfTemp=NULL,*newRealloc;

	if ((fp=fopen("shuzi.txt","r")) == NULL)
	{
		printf("打开文件: shuzi.txt 失败\n\n");
		return (SYS_ERR);
	}	

	//测试 申请内存方式
	pfMalloc=(float *)malloc(sizeof(float) * TEST_ARRAY_LENGTH);
	if (NULL == pfMalloc)
	{
		printf("\nmalloc fail\n");
		fclose(fp);
		return (SYS_ERR);
	}
	
	int readNum=0,circle=1,sum;

	sum=circle*TEST_ARRAY_LENGTH;

	while (!feof(fp))
	{
		if (readNum == sum)
		{
			circle++;
			pfTemp=pfMalloc;
			newRealloc=(float *)realloc((float *)pfMalloc,sizeof(float) * TEST_ARRAY_LENGTH*circle);
			if (NULL == newRealloc)
			{
				printf("\nrealloc fail\n");
				fclose(fp);
				SAFE_FREE(pfTemp);
				return (SYS_ERR);
			}
			pfMalloc=newRealloc;
			sum=circle*TEST_ARRAY_LENGTH;			
		}
		if (readNum < sum)
		{
			fscanf(fp,"%f",&pfMalloc[readNum]);	
			readNum++;
		}		
	}

// 	printf("\n读取的总数字为: %d\n\n",readNum);
// 	for(int i=0;i<readNum;i++)
// 	{ 
// 		printf("%d = %6.3f\n",i,pfMalloc[i]);
// 	}

	SAFE_FREE(pfMalloc);
	SAFE_FCLOSE(fp);
	return (SYS_OK);
}
赵4老师 2013-08-13
  • 打赏
  • 举报
回复
上帖27行if (i>0) printf("a[%d-1]==%g\n",i-1,a[i-1]); 应改为 if (i>0) printf("a[%d-1]==%g\n",i,a[i-1]);且在下一行即在原28行return 3;之前加一行free(a);
赵4老师 2013-08-13
  • 打赏
  • 举报
回复
没实际编译链接调试,不保证对,仅供参考:
#include <stdio.h>
#include <stdlib.h>
FILE *fp1;
int num;
int i;
int main() {
    fp1=fopen("input.txt","r");
    if (NULL==fp1) {
        printf("Can not open file input.txt!\n");
        return 1;
    }
    if (1!=fscanf(fp1,"%d",&num)) {
        fclose(fp1);
        printf("Can not read num!\n");
        return 2;
    }
    float *a=(float *)malloc(sizeof(float)*num);
    if (NULL==a) {
        fclose(fp1);
        printf("Can not malloc!\n");
        return 3;
    }
    for (i=0;i<num;i++) {
        if (1!=fscanf(fp1,"%f",&a[i])) {
            fclose(fp1);
            printf("Can not read a[%d]!\n",i);
            if (i>0) printf("a[%d-1]==%g\n",i-1,a[i-1]);
            return 3;
        }
    }
    fclose(fp1);
    printf("%d data read:\n",num);
    for (i=0;i<num;i++) {
        printf("a[%d]==%g\n",i,a[i]);
    }
    free(a);
    return 0;
}
赵4老师 2013-08-13
  • 打赏
  • 举报
回复
输出a[i],帖主是用的printf("a[%d]=%g\n",i,a[i]);吗?
wangbylove 2013-08-13
  • 打赏
  • 举报
回复
int i =0;
        ch = fgetc(fp1);
	while(!feof(fp1))
	{
		ch = fgetc(fp1);
                a[i++] = ch;
 
	}
Scorpiour 2013-08-12
  • 打赏
  • 举报
回复
[code=c/c++] #include <vector> //.. vector<float> v; ifstream infile; // float tmp; while(infile>>tmp) { v.push_back(tmp); } [/code]
橡皮擦 2013-08-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

int main(void)
{
    int malloc_num = 0;
    int i = 0;
    FILE *fp = NULL;

    if((fp = fopen("./aa.txt", "r")) == NULL)
    {
        fprintf(stderr, "fopen ./aa.txt failed: %s\n", strerror(errno));
        exit(0);
    }

    fscanf(fp, "%d", &malloc_num);

    float *ft = (float *)malloc(malloc_num);

    for(i = 0; i < malloc_num; i++)
        fscanf(fp, "%f", &ft[i]);

    for(i = 0; i < malloc_num; i++)
        printf("ft[%d] = %f\n", i, ft[i]);

    return 0;
}
mujiok2003 2013-08-08
  • 打赏
  • 举报
回复
贴完整代码。
赵4老师 2013-08-08
  • 打赏
  • 举报
回复
请检查fscanf的返回值!
max_min_ 2013-08-08
  • 打赏
  • 举报
回复

,fscanf遇到空格和换行时结束,注意空格时也结束
lpcads 2013-08-08
  • 打赏
  • 举报
回复
为什么我的正常?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int num = 0;
	float a[5]={0};
	FILE* fp1 = fopen("d:\\tr\\a.txt","r");
	
	if(fp1==NULL)
		return 1;

	fscanf(fp1,"%d",&num);
	for(int i=0;i<5;++i)
		fscanf(fp1,"%f",&a[i]);
	fclose(fp1);

	return 0;
}
return 0;前的断点
chaoyuebaihu 2013-08-08
  • 打赏
  • 举报
回复
这个不是很难,可以的
兆帅 2013-08-08
  • 打赏
  • 举报
回复
用字符流读出
资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在C语言中,从文本文件(如.txt文件)里读取数据并存入数组是常见操作,尤其处理二维数据文件时。首先,需打开文件并确认是否成功,用fopen()函数实现,它有文件名和模式(读取模式为"r")两个参数。若文件打开失败,程序输出错误信息并返回负值,示例如下: 接着,读取文件首行获取数据个数和维度,一般是一组数字,借助fscanf()函数读取。假设首行格式为numberofpoints dim ne,读取方式为: 其中%c用于读取单个字符,像分隔符或换行符。之后,依据读取到的数据个数动态分配内存存储数据,假设数据类型是REAL(即double),创建pointlist数组存放数据: 然后,逐行读取文件直至末尾,用fgets()函数把一行内容读入字符数组buf,再用sscanf()解析buf中数据项,转为整数(atoi())或浮点数(atof()),存入pointlist数组。对于二维数据,每行通常含两个数值,代码如下: 需注意,feof()应在读取循环外使用,因仅在读取文件末尾后才设标志。读取行时,要保证buf数组足够大,能装下最长行。sscanf()可将字符串解析为单独项,atof()则将字符串转为浮点数。读取结束后,别忘关闭文件: 以上就是在C语言中从.txt文件逐行读取数据存数组的基本流程,能灵活处理多种格式文本数据文件,无论是整型、浮点型还是一维、多维数据。实际项目中,可根据需求调整,如增错误处理、优内存分配等。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧