Blad po scanff, pętla nieskonczona

0

Witam! Mam problem z kodem:

 char * tab = (char *) malloc(10);
        printf("Podaj \n");
        scanf("%9s", tab);

        printf("Podano: %s ", tab);

        int k;
        scanf("%d", &k);
        while(k < 10 || k > 50)
        {
            printf(" Podaj Poprawna wartosc: ");
            scanf("%d", &k);
        }

        printf("Podano: %d",k);
        int p = k;

gdy odpalam to w konsoli i wpisze do 10 znaków to jest ok, ale gdy wpisze ponad 10 znaków ( a wlasnie na to chcialem się zabezpieczyć dając w scanf przy procencie 9) to ciągle wypisuje mi z pętli podaj poprawną wartość. Co należy zrobić, żeby to działało poprawnie, głownie chodzi mi o to ze jak użytkownik poda więcej niż 10 znaków to program bierze 10 i działa dalej.

1

Może tak:

 
    char * tab = (char *) malloc(10);
    printf("Podaj \n");
    scanf("%9s", tab);
    while(getchar() != '\n')
        continue;

    printf("Podano: %s \n", tab);

    int k;
    scanf("%d", &k);
    while(k < 10 || k > 50)
    {
        printf(" Podaj Poprawna wartosc: ");
        scanf("%d", &k);
    }

    printf("Podano: %d",k);
    int p = k;
0

No niby działa, ale czemu jeśli dam niżej:

 
char color;
scanf("%c", &color);
	while(color != 'b')
	{
		printf("Podano: %c \nPodaj swoj ranking, (1-100): ", color);		
		scanf("%c", &color);			        
	}

to nawet jak podam 'a' to przerywa pętlę ?(pisze to w c)

1

scanf(" %c", &color); albo dodatkowa pętla od @KazikWielki

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