显示变量'最大值的荒谬值。

时间:2016-12-09 23:49:53

标签: c

#include <stdio.h>
int main (void)
{
    int phy,geo,i,highest,largest;
    int arr[2]={phy,geo};

    printf("marks for physics : ");
    scanf("%d",&phy);

    printf("marks for geo : ");
    scanf("%d",&geo);

    largest = arr[0];

    for (i = 0; i < 2; i++) {
        if (arr[i] > largest) {
            largest = arr[i];
        }
    }

    // Print out the Result
    printf("\nLargest Element : %d", largest);

    return(0);
}

我对变量&#39;最大的&#39;得到了荒谬的价值。 。无论我输入什么输入,它总是相同的值。它的目的是计算两个输入数字中的最大数字。

4 个答案:

答案 0 :(得分:1)

你正在用未初始化的数字填充你的数组,这是你“荒谬的价值”的来源,然后你把你的输入放在从未读过的变量中,这就是为什么你的输入永远不会改变输出。

请改为尝试:

printf("marks for physics : ");
scanf("%d", &arr[0]);

printf("marks for geo : ");
scanf("%d", &arr[1]);

答案 1 :(得分:1)

在记忆中获得五个空格,其中包含以下内容:

int phy,geo,i,highest,largest;

在内存中获取三个空格,将最后一个设置为null(以显示它是数组的结尾),并将前面五个未初始化空间中的两个中的值复制到一个数组中:

int arr[2]={phy,geo};

获取两个输入的数字,并将它们写入最初从内存中获取的五个空格中的两个:

printf("marks for physics : ");
scanf("%d",&phy);
printf("marks for geo : ");
scanf("%d",&geo);

在内存中填充第五个空格,并将从内存中第一个未初始化空间复制的值的副本填充到数组的第一个元素中:

largest = arr[0];

对于数组中的每个元素(从刚刚复制的元素开始),如果元素大于您复制到内存中第五个空格的元素,则将其复制到内存中的该空间中。

 for (i = 0; i < 2; i++) {
  if (arr[i] > largest) {
     largest = arr[i];
  }
 }

所以你所做的就是将内存中未初始化的点复制到一个数组中,然后输入并将它们写入内存中的那些点,然后查找数组中最大的元素。这会给你带来奇怪的结果,因为你正在比较程序开始运行时发生在内存中的任何值。

答案 2 :(得分:1)

声明

int arr[2]={phy,geo};

您基本上是使用尚未初始化的phygeo的当前值初始化数组。

稍后通过scanf加载值时,这些不会反映在arr中。 您需要按如下方式修改代码:

printf("marks for physics : ");
scanf("%d",&phy);
arr[0] = phy;

printf("marks for geo : ");
scanf("%d",&geo);
arr[1] = geo;

答案 3 :(得分:0)

int arr[2]={phy,geo};

这并不代表&#34; arrphygeo将来会保留的任何值的数组&#34;。

这意味着&#34; arr是一个包含phygeo现在 &#34;的任何值的数组。

这些值是不确定的,因为当您创建arr时,phygeo都尚未初始化。