C - 无法使用while和逻辑运算符停止程序

时间:2016-01-28 02:35:43

标签: c

我刚开始学习C但是我真的不知道我做错了什么。我写了这段代码,它应该在收到负数时停止读取数字。我浪费了很多时间试图弄清楚它是什么问题,我仍然不知道它是什么。

#include<stdio.h>
int main(){
    const int qtd = 3;

    float ent[qtd];
    int i = qtd;

    printf("Digite os numeros\n");

    do{
        scanf("%f", &ent[i]);
        i--;
    }while (ent[i] >= 0 && i >= 1);



    printf("\n\n\n\nPressione 'Enter' para sair");
    fflush(stdin);
    getchar();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

问题在于您检查的索引为ent为否定。它是ent[i],但在 i递减之后是,因此您正在阅读scanf尚未编写的位置。

要解决此问题,请更改代码以使用先前的位置,即

do {
    ...
} while (ent[i+1] >= 0 && ...);

您的代码还有其他几个问题,所有问题都来自数组索引从1开始的假设。但是,在C中,初始索引为零,而不是一个,因此正确的检查应为

do {
    ...
} while (ent[i+1] >= 0 && i >= 0);

此外,i应初始化为int i = qtd-1;,以避免写入已分配数组的末尾。