2015-01-15 3 views
1

Я попытался написать простую программу, которая сравнивает 3 номера и печатает самую большую из них, но она печатает все 3 из них, и я не понимаю почему. Это мой код:C простая программа не работает - «if»

#include <stdio.h> 

int main() 
{ 
    int x = 10; 
    int y = 8; 
    int z = 3; 

    if((x > y) && (x > z)); 
    { 
    printf("%d",x); 
    } 

    if((y > x) && (y > z)); 
    { 
    printf("%d",y); 
    } 
    if((z > x) && (z > y)); 
    { 
    printf("%d",z); 
    } 
    return 0; 

} 

Спасибо за помощь!

+8

Не помещайте точки с запятой в конце операторов 'if'. – user3386109

+0

У вас есть полуколонны в конце ваших 'if' -задавлений. Таким образом, вы говорите «если (что-то) empty_statement», а затем ваши блоки 'printf' не квалифицируются никаким тестом' if'. IOW, они будут выполняться каждый раз, потому что нет связанных с ними условных тестов. – frasnian

ответ

3

Удалить точку с запятой в конце каждого оператора if. Это заставляет оператор if запускать нулевой оператор (;), а затем впоследствии запускать оператор блока {printf (...); }

#include <stdio.h> 

int main() 
{ 

    int x = 10; 
    int y = 8; 
    int z = 3; 


    if((x > y) && (x > z)) 
    { 
    printf("%d",x); 
    } 

    if((y > x) && (y > z)) 
    { 
    printf("%d",y); 
    } 
    if((z > x) && (z > y)) 
    { 
    printf("%d",z); 
    } 
    return 0; 

} 
+0

О, я должен был знать это сам .. но спасибо за быстрый ответ! –

3

Вы должны использовать еще, вы должны удалить точку с запятой после того, как если заявления, полуфиналы колонов после МФСА означают, что тело из если пусто, а другого материала нормального блока кода

#include <stdio.h> 

int main() 
{ 

    int x = 10; 
    int y = 8; 
    int z = 3; 


    if((x > y) && (x > z)) 
    { 
    printf("%d",x); 
    } 
    else { // Will not make difference in this particular case as your conditions cannot overlap 
    if((y > x) && (y > z)) 
    { 
    printf("%d",y); 
    } 

    else { // Will not make difference in this particular case as your conditions cannot overlap 

    if((z > x) && (z > y)) 
     { 
    printf("%d",z); 
     } 
    } 
} 
    return 0; 

} 
3

У вас есть точка с запятой после вашего if условия:

if((x > y) && (x > z)); 

точка с запятой занимает место блока или заявления, которое будет выполняться, если условие истинно. Это как если бы вы написали:

if((x > y) && (x > z)) 
    { 
    ; 
    } 
    { 
    printf("%d",x); 
    } 

Вы можете, мы надеемся увидеть, как это будет выполняться оператор печати безоговорочно.

0

Логика проще, если использовать дополнительную переменную для максимальной

#include <stdio.h> 

int main() 
{ 
    int x,y,z, max; 
    scanf ("%d", &x); 
    max = x; 
    scanf ("%d", &y); 
    if (y > max) 
     max = y; 
    scanf ("%d", &z); 
    if (z > max) 
     max = z; 

    printf ("max = %d", max); 

    return 0; 
} 
+0

Ваш ответ не объясняет, почему операторы OP 'if' были проигнорированы. – fenceop

+0

И более того, это показывает, что есть и другие способы думать. Немыслимо! – IrineK

+0

Сканирование здесь не требуется, но спасибо за хорошее предложение с переменной maxiumum. :) –

1

Ответ на ваш вопрос чисто на основе знания, используя точку с запятой в C и синтаксис if заявления.

Для получения дополнительной информации см. semicolon и получите четкое представление о ifsyntax.

Смежные вопросы