text zur eingabeaufforderung wiederholt sich



  • hallo,

    hab ein programm geschrieben aber immer wenn ich eine auswahl treffe und dann etwas berechne kommt nach dem ergebnis mein menü (das eine auswahl anfordert)immer doppelt wieder. warum?

    hier der quelltext:

    #include <stdio.h>
    #include <math.h>

    void main()

    {
    double x, y;
    char ch;

    while (1)

    {
    printf("Was wollen Sie berechnen? (A)Sinus, (B)Cosinus, (C)Wurzel (E)xit:\t");
    scanf("%c", &ch);

    if(ch == 'a')
    {
    printf("Geben Sie die Zahl ein fuer die Sie den Sinus berechnen wollen:\t");
    scanf("%lf", &x);

    y = sin(x);

    printf("\nErgebnis:\t%lf\n\n", y);
    continue;

    }

    else if(ch == 'b')
    {
    printf("Geben Sie die Zahl ein fuer die Sie den Cosinus berechnen wollen:\t");
    scanf("%lf", &x);

    y = cos(x);

    printf("\nErgebnis:\t%lf\n\n", y);
    continue;

    }

    else if(ch == 'c')
    {
    printf("Geben Sie die Zahl ein fuer die Sie die Wurzel berechnen wollen:\t");
    scanf("%lf", &x);

    if(x > 0)
    {

    y = sqrt(x);

    printf("\nErgebnis:\t%lf\n\n", y);

    continue;
    }

    else printf("Falsche Eingabe!!\n\n");

    continue;

    }
    else if(ch == 'E')break;
    else if(ch == 'e')break;

    }

    }



  • hab glaub ich den fehler gefunden. habe ein fflush(stdin); vor meine printf für menüauswahl gesetzt. ist das so richtig?



  • Ja es hat mit fflush(stdin); zu tun. Du musst fflush(stdin); nach jedem scanf() setzen:

    #include <stdio.h> 
    #include <math.h> 
    
    void main() 
    
    { 
    double x, y; 
    char ch; 
    
    while (1) 
    
    { 
    printf("Was wollen Sie berechnen? (A)Sinus, (B)Cosinus, (C)Wurzel (E)xit:\t"); 
    scanf("%c", &ch);
    fflush(stdin); 
    
    if(ch == 'a') 
    { 
    printf("Geben Sie die Zahl ein fuer die Sie den Sinus berechnen wollen:\t"); 
    scanf("%lf", &x); 
    fflush(stdin); 
    
    y = sin(x); 
    
    printf("\nErgebnis:\t%lf\n\n", y); 
    continue; 
    
    } 
    
    else if(ch == 'b') 
    { 
    printf("Geben Sie die Zahl ein fuer die Sie den Cosinus berechnen wollen:\t"); 
    scanf("%lf", &x); 
    fflush(stdin); 
    
    y = cos(x); 
    
    printf("\nErgebnis:\t%lf\n\n", y); 
    continue; 
    
    } 
    
    else if(ch == 'c') 
    { 
    printf("Geben Sie die Zahl ein fuer die Sie die Wurzel berechnen wollen:\t"); 
    scanf("%lf", &x); 
    fflush(stdin); 
    
    if(x > 0) 
    { 
    
    y = sqrt(x); 
    
    printf("\nErgebnis:\t%lf\n\n", y); 
    fflush(stdin); 
    
    continue; 
    } 
    
    else printf("Falsche Eingabe!!\n\n"); 
    
    continue; 
    
    } 
    else if(ch == 'E')break; 
    else if(ch == 'e')break; 
    
    } 
    
    }
    

    ___________________

    www.c-programmieren.com



  • Ich habe noch eine kleine Kritik! Ich finde du solltest die Bedingungen so schreiben:

    if(ch == 'a' || ch== 'A')//...
    

    Weil du sagst ja, dass man 'A' drücken soll, wenn man in dem Fall den Sinus berechnet haben will, aber wenn man dann auf A drückt passiert nichts!
    Sonst ist das Programm echt gut.

    ______________

    www.c-programmieren.com



  • vielleicht sollte mal jemand sagen, das fflush(sdtin) "böse" ist und nur unter windows bzw. mit dem microsoft compiler richtig funktioniert, besser wäre es das '\n' gleich aus der eingabe herauszuziehen

    do scanf("%c",&ch); while(getchar() != '\n');
    

    Siehe: http://www.pronix.de/pronix-656.html

    btw. es wäre besser int main(void) zu schreiben und vllt eine switch abfrage einzubauen und den code etwas einzurücken, da es sonst eher unleserlich wird



  • cool danke!!


Anmelden zum Antworten