Problem mit Programm - Fehlermeldung



  • Hallo!

    Hier das Programm:

    #include <stdio.h>
    
    int main ()
    {
      int eingabe;
      int m; // Die Anzahl der Karten
      int k; // Der einzelne Kartenpreis
      int p; // Gesamtpreis der Karten
      char y = 'a';
      eingabe = 0;
      m = 0;
      k = 0;
      p = 0;
    
      printf("Druecken Sie die 1 um den Sitzplatzpreis zu waehlen\n");
      printf("Druecken Sie die 2 um die Kartenanzahl zu waehlen\n");
      printf("Druecken Sie die 3 um das Programm zu beenden\n");
      printf("Gesamtpreis: %d\n",p);
      p=k*m;
      printf("eingabe:\n");
      scanf("%d",&eingabe);
      fflush(stdin); 
    
      switch(eingabe)
      {
        case 1:
          printf("Druecken Sie a fuer 10 Euro, b fuer 20 Euro und c fuer 30 Euro\n");
    	  scanf("%c",y);
    	  fflush(stdin);
    	  printf("eingabe:%c");
    	  break;
    
    	  switch(y)
    	  {
    	    case 'a':
    		  printf("Sie haben den Kartenpreis für 10 Euro ausgewaehlt\n");
    		  k=10;
    		  break;
    
    		case 'b':
    		  printf("Sie haben den Kartenpreis für 20 Euro ausgewaehlt\n");
    		  k=20;
    		  break;
    
    		case 'c':
    		  printf("Sie haben den Kartenpreis für 30 Euro ausgewaehlt\n");
    		  k=30;
    		  break;
    
    		default:
    	    printf("Sie haben keinen Buchstaben zwischen a und c ausgewählt\n");
    		break;
    	  }
    
    	case 2:
    	  printf("Geben Sie bitte die Anzahl der Personen ein:\n");
    	  scanf("%d",m);
          break;
    
    	case 3:
    	  printf("Vielen Danke fuer Ihren Einkauf - Auf wiedersehn!\n");
    	  break;
    
    	default:
    	printf("Sie haben keine Zahl zwischen 1 und 3 ausgewaehlt\n");
    	break;
      }
    
    return 0;
    }
    

    Und wenn ich jetzt auf Starten ohne Debugging gehen kommt zwar das Schwarze Fenster, aber wenn ich 1, 2 oder 3 eintippe und dann noch ne Zahl dann kommt ein Fehlerbericht(Siehe http://www.imagebanana.com/view/eypjf4o3/CFehler.png).

    Was hat es da?
    Sind Fehler im Programm?

    Danke!

    MfG C_Boy



  • Auf jeden Fall gibt's mit fflush(stdin) Probleme. Ob noch weitere Fehler drin sind, habe ich jetzt nicht geguckt.



  • Ich hab jetzt fflush weggelassen jetzt kommt aber noch immer so ein Fehler.
    Was jetzt?



  • scanf("%c", &y);
    

    und

    scanf("%d", &m);
    

    (&-Operator nicht vergessen!)



  • Immer sachte mit deinen Ansprüchen.
    Wir machen das hier umsonst für dich und deine ersten Gehversuche, was man z.B. an deinen (wo auch immer aufgeschnappten und sich definiert undefiniert verhaltenen) Versuchen zum Lesen von der Konsole sehen kann.
    Korrekt liest man ein Zeichen von der Konsole, indem man sich sofort danach um den verbleibenen Rest des Eingabepuffers DEFINIERT kümmert, z.B.

    int eingabe;
    eingabe = getchar(); while( eingabe!='\n' && getchar()!='\n' );
    

    Nicht viel anders läuft es mit dem Lesen eines Integers.
    Außerdem gehört das break im case '1' Zweig hinter den 2. switch-Block, das ist nämlich auch undefiniertes Verhalten.
    Und wenn dein Programm dann immer noch nicht zu deiner Zufriedenheit läuft, liegt es ausschließlich an dir und nicht an den Antwortern, die nur selten solchen Code durch ihren eigenen Compiler schicken (können).



  • Das sagt Microsoft zu fflush(stdin):
    http://msdn.microsoft.com/en-us/library/9yky46tz(VS.71).aspx

    -> siehe Kommentar im Quelltext

    Ist also vom Compiler und dessen Einstellungen abhängig ob es funktioniert oder nicht. Zur Zeit ist mir nur der Auszug aus der Norm, nach der das undefiniert ist und Mircosoft, wo es als Erweiterung der Norm beschrieben ist, bekannt.



  • Danke, echt Nett :).
    Das Programm funktioniert jetzt.
    Und Sorry wenn man Verhalten falsch war.


Log in to reply