2014-12-20 2 views
-1

У меня действительно очень неприятная проблема в моей простой программе на C, и я не понимаю, почему этот код не работает.Modulo in C, неправильный вывод

Это код:

#include <stdio.h> 

    int main() 
{ 

    unsigned long long podstawa,wykladnik; 
    unsigned int d; 


    scanf("%d",&d); 
    while(d>0) 
    { 
     d--; 
     scanf("%d %d",&podstawa,&wykladnik); 

     printf("%d %d",(podstawa%10),(wykladnik%10)); 

    } 

    return 0; 
} 

При компиляции этой программы вы сможете увидеть, что даже несмотря на ввод данных, является правильным.

Wykladnik%10 дает неправильный номер.

Например значение podstawa и wykladnik составляет 3 и в то время как podstawa%10 печатает 3 wykladnik%10 печатает 5.

Эта ошибка интересна тем, что значение wykladnik%10 всегда больше, чем это должно быть на 2 и у меня нет идея почему.

Надеюсь, я предоставил достаточно информации, и кто-то может мне помочь. Я пытался найти эту ошибку в течение 10 минут, и я все еще не вижу ее.

+1

распечатки podstawa и wykladnik сразу после зсапа – Yetti99

+3

Попробуйте использовать '% llu' вместо'% d' –

ответ

1

Вы используете неправильный формат спецификации try "%llu".

5

Вы получаете неправильный результат из-за неправильного спецификатора, используемого для ваших типов данных. Он будет вызывать неопределенное поведение. Изменение формата спецификатор от %d к %llu для unsigned long long и %u для unsigned int

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