使用其他功能查找最高编号

时间:2015-03-04 13:22:17

标签: c

每个人都可以帮我解决我的代码有什么问题,或者我的代码中缺少什么... 我们有这个活动,我们必须使用另一个函数找到最高的数字。

#include <stdio.h>
#include <stdlib.h>
#define p printf
#define s scanf
int high (int n1);
int main(int argc, char *argv[])
{
  int i, num[10];
  p("Input 10 numbers\n");
  for (i=0; i<10; i++)
   {
    p("Enter Number: ");
    s("%d",&num[i]);
   }
  p("Highest Number: %d",high(num[i]));
  getch();
}

int high (int n1)
{
 int l;
 for (l=0; l<n1; l++)
 {
  if (n1 > l)
  return n1;
 }
}

当我输入任何数字时,我总是得到37 ..

2 个答案:

答案 0 :(得分:1)

int high (int n1);应该是

int high (int *arr, int sz);  /* You need to pass an array */

p("Highest Number: %d",high(num[i]));应该是

p("Highest Number: %d",high(num, 10));  /* Passing array now, not one element */

int high()应该重写为:

int high (int *arr, int sz)
{
 int l, mx = INT_MIN;
 for (l=0; l<sz; l++)
 {
  if (mx < arr[l])
  {
    /* Left as an excercise */
  }
 }
 return mx;
}

由于标记为,我建议使用available C++ to find max in a range

const int max = *std::max_element(&num[0], &num[10]); // #include <algorithm>

答案 1 :(得分:0)

好吧,我不知道你是否还需要答案,但我更正了你的代码。以下是我发现的错误

int high (int n1)
{
 int l;
 for (l=0; l<n1; l++)
 {
  if (n1 > l)
  return n1;
 }
}

在这个for循环中,有条件l<n1并且在for循环中你有if(n1 > l)语句,由于l<n1,它永远不会被获得。你说你每次都得到37分,但我得到了10分。这表明它是未定义的行为,因为没有返回实际值。 (这个代码部分真的没有任何意义,因为这个函数甚至没有尝试找到最大的数字。)

我发现的另一个问题是您使用了getch()而未包含<conio.h>(同时指出<conio.h>在C ++中不是标准的)

好吧,即使这个问题被标记为C ++,由于代码完全是c,我在c中制作了一个固定的代码。我已删除代码中的getch()。所以这是代码

#include<limits.h>
#include <stdio.h>
#include <stdlib.h>
#define p printf
#define s scanf
int high (int *n1,int lar);       // now I have used *n1 to get the address of the array.
int main(int argc, char *argv[])
{
  int i, num[10],lar=INT_MIN;   // the variable lar is given the minimum value that can be held by an int
  p("Input 10 numbers\n");
  for (i=0; i<10; i++)
   {
    p("Enter Number: ");
    s("%d",&num[i]);
   }
  p("Highest Number: %d",high(num,lar));  // sending the entire array to the function by sending its address

}
int high (int *n1,int lar)
{
 int l;
 for (l=0; l<10; l++)  // since the size you have taken for your array is 10, I have used 10 here. But if you don't know the size beforehand, pass the size as an argument to the function
 {
  if (n1[l] >lar )    // Well, this is the simple part
   lar=n1[l];         // Simply assigning the largest value to lar
 }
 return lar;          // Finally returning the value lar.
}

嗯,希望这可以帮到你。