unia walidacja wejścia

0

Napisałem podany kod

#include <stdio.h>
#include <stdlib.h>

struct abc{
unsigned char a: 1;
unsigned char b: 1;
unsigned char c: 1;
unsigned char d: 1;
unsigned char e: 1;
unsigned char f: 1;
unsigned char g: 1;
unsigned char h: 1;
};

union bit_set
{
    unsigned int number;
    short number2[2];
    unsigned char number3[4];
    struct abc number4[4];
};
int main()
{
    int i;
    union bit_set p;
    printf("Podaj liczbe");
    scanf("%u",&p.number);
    printf("%u\n",p.number);
    for(i=0;i<2;i++)
    {
        printf("%hu ",*(p.number2+i));
    }
    printf("\n");
    for(i=0;i<4;i++)
    {
        printf("%u ",*(p.number3+i));
    }
    printf("\n");
    for(i=0;i<4;i++)
    {
       
        printf("%d",(p.number4+i)->h);
        printf("%d",(p.number4+i)->g);
        printf("%d",(p.number4+i)->f);
        printf("%d",(p.number4+i)->e);
        printf("%d",(p.number4+i)->d);
        printf("%d",(p.number4+i)->c);
        printf("%d",(p.number4+i)->b);
        printf("%d",(p.number4+i)->a);
        printf(" ");
    }

    return 0;
}

Szukam sposobu na sprawdzenie poprawności wpisanej liczby (po wpisaniu czegoś innego niż liczba program ma wywalić incorrect input oraz zwrócić 1 ) niestety nie mogę używać operacji if , switch oraz operatora trójargumentowego ? : .

0

Sprawdź wartość zwracaną przez scanf(). Aby obejść głupi zakaz użyj while jako instrukcji warunkowej:

int elements_read = scanf("%u",&p.number);
// if(elements_read == 1)
while(elements_read) {
    // ...
    break;
}
// else
while(!elements_read) {
    // ...
    break;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1