Есть ли ошибка в моем коде?Я новичок - PullRequest
1 голос
/ 27 апреля 2019

когда я даю максимальные значения 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 ]

5 голосов
/ 27 апреля 2019

ваш способ неверен, например, с помощью ввода 2 1 4 3 if(a>b) - правда, но if(a>c) - ложь, поэтому вы больше ничего не делаете и не обнаруживаете максимальное число

из вашей проблемы я также призываю вас проверить 4 действительных int была проверка ввода scanf("%d %d %d %d",&a,&b,&c,&d) возвращает 4

предложение:

#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;
}

Компиляция и исполнение:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra m.c
pi@raspberrypi:/tmp $ ./a.out 
1 2 4 3
the enter no.: is 1 2 4 3
the greater is 4

Конечно, есть и другой способ обойтись без запоминания всех чисел

3 голосов
/ 27 апреля 2019
#include <stdio.h>
int main() {
    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 && a > c && a > d)
        printf("%d is greater\n", a);
    else if(b > a && b > c && b > d)
        printf("%d is greater\n", b);
    else if(c > a && c > b && c > d)
        printf("%d is greater\n", c);
    else
        printf("%d is greater\n", d);
    return 0;
}
2 голосов
/ 27 апреля 2019

Ваши условия зависят друг от друга, но они не должны быть.

То есть, второе условие высокого уровня (иначе, если (b> a)) будет проверяться, только если a не больше, чем b.

Например, с учетом ввода:

a = 1

b = 2

с = 3

d = 4

Второе условие высокого уровня будет истинным (b больше, чем a), и поэтому никакое другое условие вообще не будет проверяться (условие, если d является наибольшим, не будет проверено, и строка не будет печати).

Чтобы решить эту проблему, вы можете изменить условия, чтобы сделать каждый из них одним, если (с && (и) между ними), или вы можете изменить свой код, чтобы всегда использовать «если» вместо ваше "иначе, если".

0 голосов
/ 27 апреля 2019

Порядок вашей программы вызывает проблему.Если вы задали максимальные значения c и d, но если b> a или a> b, они введут первые два оператора if и не достигнут двух последних операторов.Попробуйте указать максимальное значение c или d и выбрать два числа так, чтобы a = b.Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...