dev-cpp & getchar()

0
...

while (l != 'T' && l != 't' && m<200)
    {
        m=m+1;
        printf("Prosze podac %d liczbe: ",m);
        scanf("%f", &x);
        s=s+x;
        printf("Jesli chcesz zakonczyc wpisz [T/t]\n");
        l=getchar();
     }

...

Problem polega na tym, ze kompilator miksuje getchar z scanf, tzn. nie czeka na wpisanie znaku tylko przelatuje petle dalej, proszac o wpisanie 2 cyfry. Dopiero jak wpisze:

while (l != 'T' && l != 't' && m<200)
    {
        m=m+1;
        printf("Prosze podac %d liczbe: ",m);
        scanf("%f", &x);
        s=s+x;
        printf("Jesli chcesz zakonczyc wpisz [T/t]\n");
        l=getchar();
        l=getchar();

dwa razy pod rzad wtedy czeka. Tak jakby wpisanie liczby i potwierdzenie enterem interpretowal rodnoczenie jako przejscie przez getchar. Jak sie tego pozbyc? Co robie zle?

z gory dzieki!
Pozdrawiam!

0

Odpowiedz jest bardzo prosta. Jak wpiszesz jeden raz getchar to zobacz co sie kryje pod zmienna l. Jak zobaczysz co sie wyswietli to myle ze powinienes juz zrozumiec dlaczego tak jest.

0

tzn mam dopisac printf("%s",l); ? jak do dopisuje to program sie uruchamia, a po wpisaniu pierwszej liczby pojawia sie blad windowsowy "Program wykonal nieprowidlowa operacje.."

0

tzn mam dopisac printf("%s",l); ?

Nie, nie masz czegoś takiego dopisywać. Od kiedy to klawisz jest ciągiem znaków do jasnej ciasnej? Napisz po ludzku:

printf("%c",l);

albo

printf("%i",(int)l); // nie wiem, jakiego typu jest l, więc rzutuję na wszelki wypadek
0

ok :) u mnie l jest typu char

jak dopisuje to pierwsze to nic sie nie wyswietla pod l (tzn program dziala tak jak dzialal w 1 wersji, jak dopisuje drugie, wyswietla '10'

0

noo, a teraz podpowiem ci, że 10 to kod znaku '\n' - nowej linii. scanf czyta z klawiatury do napotkania '\n', ale samego '\n' nie rusza - zostawia w buforze klawiatury.

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