c新手吧 关注:8,558贴子:48,066
  • 2回复贴,共1

有办法将代码不限制数量处理任意数据么...

只看楼主收藏回复

先上题目和代码,以示敬意(似乎直接粘贴上来不太好看,还是截图好了)

经过一天多的艰苦奋斗终于算是勉强把代码写出来了,看着感觉还...好像哪里没符合题目要求?
先不管这些,因为有些知识是有的但是没提到(就目前学到的例如sscanf),不太确定是不是有这样的方法所以又来求教了(╯" ̄▽ ̄" )╯
指针这章的习题都是要求读入任意的数据然后进行处理,但是现在想来想去就只能在一定的字数范围内处理任意数量的数据,一旦超过这个量就没法处理了,想问下有方法能将代码改进成处理数量不限的任意数据吗?


IP属地:广东1楼2016-02-26 15:42回复
    可以实现类似于c++的vector类的push_back方法,也就是一直malloc,以至于从末尾添加数据,不会造成内存分配的多或少,正合题意
    这是我给你写的代码:
    #include<stdio.h>
    #include<string.h>
    int main()
    {
    float *t=NULL;//存储所有天数的温度数据
    float *tt=NULL;//临时指针
    float sum=0.0f, temp=0.0f;//某一天温度总计,临时变量
    int num=0, day=0;//某一天输入的数据数量,一共输入了多少天的数据
    printf(“输入任意数量的浮点数据,输入的数据数量要是6的倍数,数据之间用空格分开\n”);
    while(1)//一直循环输入
    {
    temp=-65536;//初始值是一个错值
    scanf(“%f”,&temp);
    if(temp==-65536) break;//如果scanf没有收集到数据,所以temp是一个错值,也就是输入结束,程序退出
    ++num;
    sum+=temp;
    tt=t;
    t=(float*)malloc((day*6+num)*sizeof(float));//分配内存给t,大小是刚好的
    if(tt!=NULL){//把之前的数据复制给新的内存(新的内存比旧的大一个float)
    memcpy(t, tt, (day*6+num-1)*sizeof(float));
    free(tt);//防止内存溢出
    }
    t[day*6+num-1]=temp;//在末尾添加数据
    if(num%6==0 && num!=0){//如果完成一天的输入,那么输出这一天的数据
    ++day;
    printf(“第%d天温度:\n”, day);
    for(int i=0; i<6;i++)
    printf(“%f ”, t[(day-1)*6+i]);
    printf(“\n平均温度:%.1f\n”, sum/num);
    sum=num=0;
    }
    }
    return 0;
    }


    IP属地:北京来自手机贴吧9楼2016-02-28 10:37
    回复
      2026-03-20 21:14:40
      广告
      不感兴趣
      开通SVIP免广告
      他不是让用动态内存吗?用malloc和realloc函数不就好了


      IP属地:河南来自iPhone客户端14楼2016-02-29 19:32
      回复