2015-11-03 2 views
0

Я пытаюсь создать программу, которая показывает короткие переполнения int в C. В моей программе вы вводите два коротких int и добавляете их. Если добавление превосходит 32767, мы имеем отрицательное переполнение, и если добавление уступает -32678, у нас есть положительное переполнение.overflow short int в языке C

Теперь моя проблема в том, что моя программа отказывается соблюдать какое-либо условие при использовании if. Но когда я использую do while, моя программа считает, что я уважаю оба условия одновременно.

short int n1, n2, somme; 
printf("Enter the first number: "); 
scanf("%hi", &n1); 
printf("enter the second number : "); 

scanf("%hi", &n2); 

somme= n1 + n2; 
    do 
    { 
    printf("negative overflow\n"); 
    }while (somme>32767); 
    do 
    { 
    printf("negative overflow\n"); 
    }while (somme<-32768); 

printf("the result is %hi", somme); 

Извините за мой английский. и спасибо за чтение, пожалуйста, помогите.

+1

Вы имели в виду использовать 'if', а не' do ... while'? –

+0

Вы понимаете, как работает «делать»? Это не альтернатива 'if'. Код в блоке будет выполняться один раз, даже если условие while не выполняется. Итак, «Но когда я использую, пока моя программа считает, что я уважаю оба условия одновременно», неправильно. Ваша программа логически неверна. –

+0

Я пробовал с "if", но это не работает. –

ответ

1

Я сделал несколько изменений в коде, чтобы продемонстрировать, что вы пытаетесь сделать,

#include<stdio.h> 
int main(){ 
    short int n1, n2, somme; 
    printf("Enter the first number: "); 
    scanf("%hi", &n1); 
    printf("Enter the second number : "); 
    scanf("%hi", &n2); 

    somme = n1 + n2; 
    if((n1 + n2) > 32767) 
     printf("negative overflow\n"); 
    else if ((n1 + n2) < -32768) 
     printf("positive overflow\n"); 

    printf("int addition result is %d\n", n1 + n2); 
    printf("short addition result is %hi\n", somme); 
    return 0; 
} 

А вот выход,

Enter the first number: -20000 
Enter the second number : -20000 
positive overflow 
int addition result is -40000 
short addition result is 25536 
----------------------------- 
Enter the first number: 20000 
Enter the second number : 20000 
negative overflow 
int addition result is 40000 
short addition result is -25536 

Итак, что было неправильно в Ваш код является таковым,

  • Вы используете do...while для проверки условий. Используйте if-else.
  • Вы сохранили сумму в short и сравнив это с -32768 и 32767. Вы пытаетесь проверить, не переполнилась ли ваша сумма, сравнив ее со значениями, находящимися за пределами диапазона значений, которые она может удерживать. Это также объясняется Jérôme Leducq в его answer.
+0

Большое спасибо, я думаю, что разница заключается в том, что вы используете if ((n1 + n2) <32 ...) вместо if (somme <32 .....) –

+0

@AmaraDiagana Правильно! '(n1 + n2)' оценивается как 'int', а не' short'. Таким образом, сравнение работает так, как ожидалось. –

+1

Нет гарантии, что 'int' больше, чем' short', а не 'short' - 16 бит. Как правило, вы не должны делать странные предположения вроде этого, вместо этого используйте типы 'stdint.h'. – Lundin

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