Problem mit Kontrollstruktur



  • Super, das mit dem Zeilen löschen hat funktioniert.
    Allerdings beendet sich das Programm an der Stelle, an der ausgesucht wird, ob der Rechner benutzt werden soll oder nicht:

    printf("Rechner starten? (Y) Yes (N) No\n");
    scanf("%c", &taschenrechner);
    
    switch (taschenrechner)
    {
    	case 'Y':
       case 'y':
       printf("Zinsrechner (z),\n Zinssatzrechner(s),\n Kapitalrechner (k)\n");
       scanf("%c", &rechnerwahl);
    
       switch (rechnerwahl)
       {
    

    Also das Programm startet also nicht richtig, wenn man das so ausdrücken kann.



  • Im Eingabepuffer steht dann noch das '\n'

    Mach nach dem scanf

    int c; // int c, nicht char c. Bzw. an den Anfang der Funktion.
    while ((c = getchar()) != EOF && c != '\n');
    

    aus den FAQ



  • Also das funktioniert jetzt fast.

    Jetzt kann ich aussuchen, ob ich den Rechner starten will oder nicht. Dann kann ich noch den Rechner aussuchen (Zinsen, Zinssatz, Kapital) und die Beträge eingeben, aber sobald ich Tage, Monate oder Jahre aussuchen will bricht das Programm ab und beendet sich.
    Den Code von eben habe ich auch schon an verschiedenen Stellen eingesetzt aber immer mit dem selben Ergebniss.
    Sorry wenn das hier so aus artet :S



  • Sorry, die Glaskugel ist auf der Arbeit, daher kann ich jetzt nicht sehen wie dein Programm aktuell aussieht.



  • Na ich weiß nicht ob du das wirklich sehen willst...
    Aber es nützt ja nix.
    *edit
    Sorry wegen der Formatierung, im Forum sieht das etas anders aus als.

    #include <stdio.h>
    #include <conio.h>
    
    int main (void)
    {
    
    char  rechnerwahl, taschenrechner, time;
    float kapital, z,tage, monate, jahre;
    float zinsen, zinssatz,tzinsen,mzinsen, jzinsen;
    float tzs,mzs,jzs;
    float tkap,mkap,jkap;
    
    	printf("Rechner starten? (Y) Yes (N) No\n");
    	  scanf("%c", &taschenrechner);
    
    int c; // int c, nicht char c. Bzw. an den Anfang der Funktion.
    while ((c = getchar()) != EOF && c != '\n');
    
    	switch (taschenrechner)
    	{
    	case 'Y':
       	case 'y':
       	printf("Zinsrechner (z),\n Zinssatzrechner(s),\n Kapitalrechner (k)\n");
       	  scanf("%c", &rechnerwahl);
    
       	   switch (rechnerwahl)
      	   {
    //------------------Zinsen------------------------\\
    
                case 'z':
                case 'Z':
      		printf("Der Zinsrechner\n");
       	        printf("\n Geben Sie Ihr Kapital als Ganzzahl ein: ");
          	           scanf ("%f", &kapital);
    
       	        printf("\n Geben Sie den Zinssatz als Ganzzahl ein: ");
          	           scanf ("%f", &z);
                           zinsen = z/100.0;
    
       	         printf("Möchten Sie Tage (t) Monate(m) oder Jahre (j) wissen?\n");
       		 scanf("%c", &time);
    
       		   switch (time)
          	           {
       			case 't':
          		        case 'T':
          		         printf("Geben Sie die Tage ein: ");
         			    scanf("%f", &tage);
    
          			 tzinsen = kapital*zinsen*tage/360;
          		         printf("\nZinsen in Euro pro Tag: %f",tzinsen);
          		         break;
    
                    case 'm':
          		case 'M':
                       printf("Geben Sie die Monate ein");
          		   scanf("%f", &monate);
    
          		       mzinsen = kapital*zinsen*monate/12;
          		    printf("\n Zinsen in Euro pro Monat: %f",mzinsen);
          		    break;
    
         	 		case 'j':
          		        case 'J':
    			printf("Geben Sie die Jahre ein");
          			scanf("%f", &jahre);
    
          		          jzinsen = kapital*zinsen*jahre;
          		        printf("\n Zinsen in Euro pro Jahr: %f",jzinsen);
         		        break; 
                        }
    
                getch();
          return (0);
    
    //-------------------Zinsen------------------------\\
    
    //-------------------Zinssatz------------------------\\
    
          case 's':
          case 'S':
       	printf("Der Zinssatzrechner\n");
    
       	printf("\n Geben Sie den Zinssatz als Ganzzahl ein: ");
          	scanf ("%f", &zinssatz);
                zinsen = z/100.0;
    
       	printf("\n Geben Sie ihr Kapital als Ganzzahl ein: ");
          	scanf ("%f", &kapital);
    
       	printf("Möchten Sie Tage (t) Monate(m) oder Jahre (j) wissen?");
       	scanf("%c", &time);
    
       		switch (time)
          	        {
       			case 't':
          		        case 'T':
          		printf("Geben Sie die Tage ein: ");
          		    scanf("%f", &tage);
    
          		tzs = zinsen*36000/(kapital*tage);
          		printf("\n Tageszinssatz: %f",tzs);
          		break;
    
          		         case 'm':
          		         case 'M':
    			 printf("Geben Sie die Monate ein");
          			 scanf("%f", &monate);
    
          		             mzs = zinsen*1200/(kapital*monate);
                             printf("\n Monatszinssatz: %f",mzs);
          		         break;
    
          		       case 'j':
          		       case 'J':
    			printf("Geben Sie die Jahre ein");
          			scanf("%f", &jahre);
    
          		            jzs = zinsen*100/(kapital*jahre);
          		        printf("\n Jahresszinssatz: %f",jzs);
          		        break; 
                            }
    
          		getch();
             return (0);
    //-------------------Zinssatz------------------------\\
    
    //-------------------Kapital------------------------\\
    
    		case 'k':
                    case 'K':
      		printf("Der Kapitalrechner\n");
    
      		printf("\n Geben Sie den die Zinsen als Ganzzahl ein: ");
          	         scanf ("%f", &zinsen);
    
      		printf("\n Geben Sie den Zinssatz als Ganzzahl ein: ");
          	          scanf ("%f", &z);
                         zinssatz = z/100.0;
    
       	printf("Möchten Sie Tage (t) Monate(m) oder Jahre (j) wissen?");
       		scanf("%c", &time);
    
       		   switch (time)
          		   {
       			case 't':
          		        case 'T':
          		        printf("Geben Sie die Tage ein: ");
          			scanf("%f", &tage);
    
          		           tkap = zinssatz*36000/zinsen*tage;
         			printf("\nKapital in Euro pro Tag: %f",tkap);
          		       break;
    
          		          case 'm':
          		          case 'M':
    			    printf("Geben Sie die Monate ein");
          			       scanf("%f", &monate);
    
          		              mkap = zinssatz*1200/(zinsen*monate);
          		           printf("\n Kapital in Euro pro Monat: %f",mkap);
          		           break;
    
          		          case 'j':
          		          case 'J':
    			    printf("Geben Sie die Jahre ein");
          			       scanf("%f", &jahre);
    
          		                 jkap = zinssatz*100/(zinsen*jahre);
          		            printf("\n Zinsen in Euro pro Jahr: %f",jkap);
          		            break; 
                               }
    
          	getch();
          return (0);
    
    //-------------------Kapital------------------------\\
    
    		}
    
    	}
    
    }
    


  • Naja, disese while ((c = getchar()) != EOF && c != '\n'); gehört natürlich nach jedem scanf("%c")

    Bei den Einrückungen nimmst du besser Leerzeichen statt Tabulator.



  • Also vielen Dank für eure Hilfe, aber es will nicht so wie ich. Vielleicht bekomme ich es die Tage oder so doch noch hin.
    Trotzdem Vielen Dank für die Tipps.



  • DirkB schrieb:

    Bei den Einrückungen nimmst du besser Leerzeichen statt Tabulator.

    Ansichtssache. 🙂



  • _matze schrieb:

    Ansichtssache. 🙂

    Genau, das sieht bescheiden aus.

    Welche Tabweite soll er den nehmen? 2, 4, 8

    Wenn es portabel sein soll, sieht das nur mit Leerzeichen gut aus.



  • DirkB schrieb:

    _matze schrieb:

    Ansichtssache. 🙂

    Genau, das sieht bescheiden aus.

    Welche Tabweite soll er den nehmen? 2, 4, 8

    Wenn es portabel sein soll, sieht das nur mit Leerzeichen gut aus.

    Unter Portabilität verstehe ich hier, dass ich meinen Code zu meinem Kollegen schleppen kann, und der da - anders als ich - 'ne Tabweite von 4 eingestellt hat und den Code so lesen kann, wie er es gerne möchte und gewohnt ist.

    Aber das Thema hatten wir ja schon öfter mal, und wir sollten lieber nicht wieder seitenlang darüber diskutieren. Ich weiß gar nicht, warum ich davon angefangen habe. 🙂


Anmelden zum Antworten