【问题标题】:How I can fix this array我如何修复这个数组
【发布时间】:2015-04-25 16:29:32
【问题描述】:

早上好,我试图填充一个动态向量,但是当我打印输入数据时,我得到了这样的结果:

input: 1,5,3,4,2
output: 0,1,5,3,4

有人可以帮我吗?我无法修复它。我已经尝试了很多,但无法得到它。我会非常感谢(对不起英语)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_STR 10

int vecto();

char seguir[MAX_STRLEN];
int var;

float* vector; 
char* bv;

int vecto(){
int cont=0,ch;
char v[MAX_STR];
printf ("¿number of elements to order?: ");
scanf("%d",&var);
vector = (float*)malloc(var*sizeof(float));
while((ch = fgetc(stdin)) != EOF && ch != '\n' ){};

printf("input number press f for finish \n");
    do{
        fgets(v,sizeof(v),stdin);
        if((strcmp(v,"f")!=0)){
            cont++;
            vector[cont]=strtod(v,&bv);
        }
    } while(!((cont==var) || (strcmp(v,"f")==0)));
printf("\n");
return 0;
}

【问题讨论】:

  • 我刚刚遇到另一个错误:当我达到我之前指定的元素总数或输入“f”但我无法得到它时,while 循环应该停止。当我输入“f”时,循环一直持续到我 cont==var 我将条件更改为这样但仍然不能:while(((cont&lt;var) &amp;&amp; (strcmp(v,"f")!=0)));

标签: c arrays sorting vector fill


【解决方案1】:

在设置值之前增加 cont。

只需交换订单

if((strcmp(v,"f")!=0)){
            vector[cont]=strtod(v,&bv);
            cont++;
        }

【讨论】:

  • 数组是否从 0 开始?
  • 是的。数组的第一个位置是0,第二个是1,第三个是2,以此类推!
  • 我刚刚遇到另一个错误:当我达到我之前指定的元素总数或输入“f”但我无法得到它时,while 循环应该停止。当我输入“f”时,循环一直持续到我 cont==var 我将条件更改为这样但仍然不能:while(((cont&lt;var) &amp;&amp; (strcmp(v,"f")!=0)));
  • 您使用的是&&,表示两个条件都必须为真。请改用while(((cont&lt;var) || (strcmp(v,"f")!=0)));
  • 试试while(((cont&lt;=var) || (strcmp(v,"f")!=0)));
【解决方案2】:

您增加cont,然后使用它。所以第一次访问索引 1 而不是 0。

改成:

if((strcmp(v,"f")!=0)){
   vector[cont++]=strtod(v,&bv);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2020-10-04
    • 2021-05-11
    • 1970-01-01
    • 2021-05-29
    • 2020-05-22
    • 2020-08-24
    相关资源
    最近更新 更多