Pozbycie się znaku nowej linii z buforu

0
#include <stdio.h>
#include <ctype.h>
#define ARBUZY 1.25   //cena arbuzów za kg
#define BURAKI 0.65   //cena buraków za kg
#define CEBULE 0.89   //cena cebuli za kg
#define RABAT 0.05    //rabat dla zamówienia powyżej 100 zł
#define KOSZT1 3.5    //koszt przesyłki do 5 kg
#define KOSZT2 10     //koszt przesyłki od 5 do 20 kg
#define KOSZT3 8      //koszt przesyłki powyżej 20kg 
#define KOSZT3_3 0.1  // + 0.1 za dodatkowy kg

int wybor(void);    //wybór zamowienia
int pobierz_wybor(void);    //
int pobierz_pierwszy(void);  // omiń \n z bufora
int pobierz_ilosc(void);    // omiń \n z bufora
 
int main(void)
{
    int warzywa;
    
    warzywa = wybor();
     
     
}

int wybor(void)    // wybór zamowienia
{
    int wybor;
    int arbuzy, cebule, buraki, masa, masa_a, masa_b, masa_c;
    float zamowienie, arbuzy_c, cebule_c, buraki_c, cena;
    
    
    
    while( (wybor = pobierz_wybor() ) != 'k')
    switch (wybor)
    {
        case 'a' :  printf("Podaj ilosc:\n");
                    arbuzy = pobierz_ilosc();
                    masa_a += arbuzy;
                    arbuzy_c = arbuzy * ARBUZY; 
                    break;
        case 'b' :  printf("Podaj ilosc:\n");
                    buraki = pobierz_ilosc();
                    masa_b += buraki;
                    buraki_c = buraki * BURAKI;
                    break;
        case 'c' :  printf("Podaj ilosc:\n");
                    cebule = pobierz_ilosc();
                    masa_c += cebule;
                    cebule_c = cebule * CEBULE;
                    break;
        default  :  printf("Pierdol sie\n");
                    break;
        
    }
       cena = arbuzy_c + buraki_c + cebule_c;
       masa = masa_a + masa_b + masa_c;
       printf("Wybrano łącznie %d kg warzyw za %.2f zł\n", masa, cena);
}

int pobierz_wybor(void)
{
    int ch;
    
    printf("**********************************************\n");
    printf("Wprowadź zamowienie (kilogramy)\n");
    printf("a. arbuzy    b. buraki    c.cebule    k.koniec\n");
    printf("**********************************************\n");
    ch = pobierz_pierwszy();
    
    while ( (ch < 'a' || ch > 'c') && ch != 'k')
    {
        
        printf("Wpisz a, b, c lub k.\n");
        ch = pobierz_pierwszy();
    }
    return ch;
}

int pobierz_pierwszy(void)  // omiń \n z bufora                             w tej fukcji tkwi problem wg mnie
{                                                                                                   //ale nie umiem sobie z tym poradzić             
    int ch;

    ch = getchar();
    while (getchar() != '\n')
        continue;

    return ch;

}

int pobierz_ilosc(void)
{
    char ch;
    int liczba;
    
    while (scanf("%d", &liczba) != 1)
    {
        while( (ch = getchar() ) != '\n')
        putchar(ch); //pomija bledne dane
        printf(" nie jest liczba calkowita\n");
    }
    return liczba;
}
```c
Przy pierwszym powtórzeniu pętli wszystko jest ok. dopiero przy drugim muszę 2 razy wpisać literę
bardzo proszę o pomoc.
0

while (ch=getchar() == '\n');?
albo
while (ch=getchar() == '\n')
continue;//<???>

lub:
while(true)
{
ch = getchar();
if(ch!='\n') break;
}

0

int pobierz_pierwszy(void)  // omiń \n z bufora
{
    int ch;
    bool flaga = true;
    

    while(flaga == true)
    {
        ch = getchar();
        if(ch != '\n')
        break;
        flaga == false;
    }
    
    
    return ch;

}

Wielkie dzięki pomogło !! :)   Męczyłem to od kilku godzin
0
int pobierz_pierwszy(void)  
{      
    char ch = 27;
    scanf("%c ", &ch); // spacja na końcu format stringa!
    return ch;
}

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