比较3个数字时的错误(其中1个为负数)

时间:2016-10-27 23:46:49

标签: c

如果有人帮我处理我的代码会很好。 根据任务我有几个数字(至少1个负数),如果我得到3个数字> 0或= 0然后回答为0.Cod应该找到最接近0的数字。这是我的鳕鱼,但它不起作用。

#include <stdio.h>
#include <conio.h>
int main()
{
    int uno, dos, tres; //numbers


    printf("enter your numbers");
    scanf_s("%d %d %d", &uno, &dos, &tres);
    if (uno > 0 || uno == 0 && dos > 0 || dos == 0 && tres > 0 || tres == 0)
        printf("There is no negative numbers ...");
    else if (uno == 0 || uno > 0 && dos > 0 || dos == 0 && tres < 0)
        printf("Your number is %d", &tres);
    else if (uno > 0 || uno == 0 && dos < 0 && tres < 0)
        if (dos < tres || tres == dos)
            printf("Your number is %d", &tres);
        else
            printf("Your number is %d", &dos);
    else if (uno < 0 && dos < 0 && tres < 0)
        if (uno < dos && uno < tres)
            if (dos < tres || tres == dos)
                printf("Your number is %d", &tres);
            else printf("Your number is %d", dos);
        else if (dos < uno && dos < tres)
            if (uno < tres|| uno==tres)
                printf("Your number is %d",& tres);
            else printf("Your number is %d", &uno);
        else if (tres < uno && tres < dos)
            if (uno < dos || uno==dos)
                printf("Your number is %d",&dos);
            else printf("Your number id %d",&uno);

    _getch();
    return 0;
}

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

逻辑OR(||)的优先级高于逻辑AND(&amp;&amp;),因此您应该添加一些括号。 例如

if (uno > 0 || uno == 0 && dos > 0 || dos == 0 && tres > 0 || tres == 0)

应该成为

if ((uno > 0 || uno == 0) && (dos > 0 || dos == 0) && (tres > 0 || tres == 0))

答案 1 :(得分:1)

保持简单!

假设我们有a,b和c。如何简单地检测谁是最低的? 也许我们可以使用一个变量来存储我们称之为最小值的最小值。

首先假设我们只有一个数字要测试,所以最低的数字是我们唯一的...所以min&lt; = a。

现在为这个问题添加b和c。

我们需要比较min和b,如果b低于min,则将min&lt; = b。然后我们只需要为c做同样的事情,我们可以永远这样继续。

如果我明白你的意思,你的目标是把最接近的0。因此,只需比较数字的绝对值,并将实际值存入最小值。

#include <stdlib.h>
#include <stdio.h>

int main(void) {

  int a = 0;
  int b = -1;
  int c = 2;

  int min = a;

  if (abs(min) > abs(b)) {
    min = b;
  }

  if (abs(min) > abs(c)) {
    min = c;
  }

  printf("min = %d\n", min);

  return 0;
}

如果你需要为了很多价值而看看here,你会在C中学习能够很容易地解决这个问题的数组。

printf("Your number is %d", &tres)

你在这里有一个很大的错误,你没有发送“tres”的价值,而是他的地址。 %d期望 int 而非 int * 某些文档here