所以我有这个代码,我让用户输入您想要进行比较的数字:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void){
int n;
int x;
int numbers[n];
int count;
printf("Mitme arvu vahel soovite võrdlust sooritada?: ");
scanf("%d",&n);
printf("Soovisite võrdlust teostada %d arvu vahel\n",n);
printf("Sisestage palun arvud: \n");
for (count = 1; count <= n; count++ ){
printf("Arv %d:",count);
scanf("%d",&numbers[n]);
}
for (count = 0; count <= n; count++){
if (numbers[count] > x){
x = numbers[count];
}
}
printf("%d\n",x);
return 0;
}
现在问题在于,当制作最终的printf时,我得到了一些不切实际的数字。
这是我制作n 3时的输出:
./ComparingC Mitme arvu vahel soovite võrdlust sooritada?: 3
Soovisite võrdlust teostada 3 arvu vahel
Sisestage palun arvud:
Arv 1:1
Arv 2:2
Arv 3:3
4196269
最后的数字就是我所说的。它应该显示所有其他数字中最大的数字,但现在它显示出看似深层空间的东西。
编辑:当我将n等于5并输入1作为第一个数字时,程序就在那里结束了吗?
答案 0 :(得分:2)
您正在完全跳过数组中的第一个元素!
for (count = 1; count <= n; count++ ){
scanf("%d",&numbers[n]);
从0
索引开始,直到n-1
for (count = 0; count < n; count++ ){
PS:要初始化n
的值。
答案 1 :(得分:2)
您声明numbers[n]
而未将n
设置为合理的值。您可以在C99中使用可变长度数组,但是您的长度未定义,这不是一个好主意。
将数组声明移动到n
之后具有适当的值。并且在依赖该值之前验证scanf()
是否有效。
此外,C中的数组从0开始索引,因此循环也是错误的。它应该是:
for (count = 0; count < n; ++count)
此外,循环不使用count
,它应该是:
scanf("%d", &numbers[count]);
在循环内部, not &numbers[n]
(这是一个无效的越界访问,将调用未定义的行为)。
答案 2 :(得分:2)
错误1 :在声明n
之前,numbers[n]
未初始化为正确值。 n
将包含一些垃圾值。
错误2 :在x
中使用if (numbers[count] > x)
之前未初始化{{1}}。
我认为我不需要告诉如何纠正这些逻辑错误。
答案 3 :(得分:1)
您正在使用可变长度数组(C99功能)。在声明VLA之前必须初始化n
的值。
移动您的声明
int numbers[n];
输入n
后,即在语句scanf("%d",&n);
scanf("%d",&n);
int numbers[n];
答案 4 :(得分:1)
这就是你想要的。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int n;
int x = 0;
int* numbers=NULL;
int count;
printf("Mitme arvu vahel soovite võrdlust sooritada?: ");
scanf("%d",&n);
printf("Soovisite võrdlust teostada %d arvu vahel\n",n);
numbers = malloc(sizeof(int) * n);
if(numbers == NULL)
return -1;
printf("Sisestage palun arvud: \n");
for (count = 0; count < n; count++ ){
printf("Arv %d:",count+1);
scanf("%d",&numbers[count]);
}
for (count = 0; count <= n; count++){
if (numbers[count] > x){
x = numbers[count];
}
}
printf("%d\n",x);
return 0;
}
只需在您的计算机上运行它,找出代码中的错误并学习。