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]都是乱码,数据没有读进去?
...全文
5978 15 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
用字符流读出

70,040

社区成员

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

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