我刚开始学习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;
}
答案 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;
,以避免写入已分配数组的末尾。