我的代码有什么错误吗?我是新手

时间:2019-04-27 16:09:58

标签: c

当我给a和b赋最大值时,代码可以正常工作,但是当给c或d输入最大值时,代码将不起作用。有人可以帮我吗?

我已经访问过网站并进行了研究,但找不到任何东西。

#include<stdio.h>
void main(void) {
 int a, b, c, d;

 scanf("%d %d %d %d", &a, &b, &c, &d);
 printf("the enter no.: is %d %d %d %d\n", a, b, c, d);

 if(a > b) {
    if(a > c) {
        if(a > d) {
            printf("%d is greater",a);
        }
    }
 } else if(b > a) {
    if(b > c) {
        if(b > d) {
            printf("%d is greater", b);
        }
    }
  } else if(c > a) { 
    if(c > b) {
        if(c > d) {
            printf("%d is greater", c);
        }
    }
  } else if(d > a) {
    if(d > c) {
        if(d > b) {
            printf("%d is greater", d);
        }
    }
  }
}

所有变量的输出应该相同,但是a和b仍提供预期的输出,而c和d却没有提供。

4 个答案:

答案 0 :(得分:5)

您的操作方式是错误的,例如输入2 1 4 3 *.ps1为true,而if(a>b)为false,因此您什么也不做,也不会检测到最大数量

解决您的问题,我还建议您检查4个有效的 int 是否输入if(a>c)返回4

提案:

scanf("%d %d %d %d",&a,&b,&c,&d)

编译和执行:

#include<stdio.h>

int main()
{
  int a,b,c,d;

  if (scanf("%d %d %d %d",&a,&b,&c,&d) != 4)
    fprintf(stderr, "error while entering the 4 values\n");
  else {
    printf("the enter no.: is %d %d %d %d\n",a,b,c,d);

    int max = a;

    if (b > max)
      max = b;
    if (c > max)
      max = c;
    if (d > max)
      max = d;

    printf("the greater is %d\n", max);
  }
  return 0;
}

当然,还有另一种方法可以不记住所有数字

答案 1 :(得分:3)

script2.py

答案 2 :(得分:2)

您的条件彼此依赖,但不应该。

意味着,仅当a不大于b时,才会检查第二个高级条件(否则if(b> a))。

例如,假设输入:

  

a = 1

     

b = 2

     

c = 3

     

d = 4

第二个高级条件为true(b大于a),因此,将完全不检查其他条件(如果d为最大的条件将不被检查,并且该行将不被检查)印刷)。

要解决此问题,您可以更改条件以使每个条件都成为一个if(在它们之间带有&&(和)),也可以将代码更改为始终使用“ if”而不是您的“否则”。

答案 3 :(得分:0)

是导致问题的程序顺序。 如果将c和d设置为最大值,但如果b> a或a> b,它将输入前两个if语句,并且不会到达最后两个语句。 尝试将c或d设置为最大值,然后选择两个数字,例如a = b。这应该起作用。