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]都是乱码,数据没有读进去?
...全文
4034 点赞 收藏 15
写回复
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日
用字符流读出
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告