Problem makro

S6
S6
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:54
0

Cześć stworzyłem makro do wyswietlania bitow z liczby makro ma działać dla róznych typów zmiennych

Kopiuj
#define DISPLAY_BITS(value){\
    int i;\
    int x=sizeof(value);\
    for(i=x*8-1;i>=0;i--)\
    {\
         if((value&((unsigned long long int)1<<i))==0)\
        {\
            printf("0");\
        }else\
        {\
            printf("1");\
        }\
    }\
}


Dla zmiennych typu unsigned long ** i ** unsigned short działa poprawnie natomiast dla unsigned int wyswietla zawsze tą samą wartość

00000000000000000000000000000100

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
1

Możesz pokazać jak wywołujesz to makro? Bo SOA #1

S6
S6
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:54
0

unsigned int x;
scanf("%u",&x);
DISPLAY_BITS(x);

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
0

A jak dasz spację przed %u będzie to samo?
scanf(" %u",&x);

edytowany 1x, ostatnio: Delor
S6
S6
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:54
0

Tak dzieje się to samo

atmal
  • Rejestracja:około 8 lat
  • Ostatnio:12 dni
  • Postów:913
0

A jaką wartość wprowadzasz do programu?


Failure of one test is a tragedy, failure of fifty is a statistic.
S6
S6
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:54
0

1,2, 10 ,20 dla każdego to samo czyli 00000000000000000000000000000100

Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
0

4 to EOF w ASCII.
https://pl.wikibooks.org/wiki/C/scanf

Funkcja zwraca EOF jeżeli nastąpi koniec danych lub błąd odczytu zanim jakiekolwiek konwersje zostaną dokonane lub liczbę poprawnie wczytanych pól (która może być równa zero).

Nie zostają Ci śmieci w stdin po poprzednim scanf'ie? Np. znaki przejścia do nowej linii, przecinki itp.?

edytowany 1x, ostatnio: Delor
S6
S6
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:54
0

Nie sądze , wyświetliłem sobie zmienną x - scanf działa poprawnie . Dodatkowo dla innych typów zmiennych znajdujących się w tym samym bloku if else if wszystko działa jak należy.

atmal
  • Rejestracja:około 8 lat
  • Ostatnio:12 dni
  • Postów:913
0

Pokaż może więcej kodu, bo testowałem to makro u siebie i wszystko zdaję się działać poprawnie.


Failure of one test is a tragedy, failure of fifty is a statistic.
Delor
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
1

Zmień nazwę zmiennej w makro tak aby ciężko było o kolizję nazw z tymi w programie. Teraz "gryzą się".

S6
S6
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:54
0

Tak wyglada main

Kopiuj

int main() 
{
    

    int type;
    int error;


    printf("Enter data type : ");
    error=scanf("%d",&type);
    if(error==0)
    {
        printf("Incorrect input");
        return 1;
    }
    
    printf("Enter an integer : ");
    if(type==0)
    {
        unsigned int x;
        error=scanf("%u",&x);
        if(error==0)
        {
            printf("err");
            return 1;
        }
        DISPLAY_BITS(x);
    
    }else if(type==1)
    {
        unsigned short y;
        error=scanf("%hu",&y);
        if(error==0)
        {
            printf("err");
            return 1;
        }
        DISPLAY_BITS(y);
    }else if(type==2)
    {
        unsigned long z;
        error=scanf("%lu",&z);
        if(error==0)
        {
            printf("err");
            return 1;
        }
        
        DISPLAY_BITS(z);
        
    }else
    {
        printf("errror");
        return 2;
    }
    
    
    return 0;
}
S6
S6
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:54
0

Tak problemem była nazwa zmiennej x.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.