C - 进行数字比较程序时输出错误

时间:2014-01-31 09:47:51

标签: c

所以我有这个代码,我让用户输入您想要进行比较的数字:

#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作为第一个数字时,程序就在那里结束了吗?

5 个答案:

答案 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;
    }

只需在您的计算机上运行它,找出代码中的错误并学习。