probleme mit longjmp



  • ich bin noch totaler c neuling und habe einfach mal um das neu angeeignete wissen zu testen folgendes programm geschriebn:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <setjmp.h>
    
    jmp_buf sprung;
    
    main()
    {
    
    	int y,n;
    	FILE *log;
    	char ch[80];
    	int i,bewertung;
    	char name[80],vname[80];
    	double gehalt,angestellt;
    	printf("\n\tWilkommen bei dem Mitarbeiterverwaltungsprogramm!\n\n");
    
    	 setjmp(jmp_buf sprung);
    		printf("Weiter gehts!");
    		gets(stdin);	
    		printf ("\nVorname:");
    		gets(ch);
    		strcpy(vname,ch);
    		printf("\nNachname:");
    		gets(ch);
    		strcpy(name,ch);
    		printf("\nGehalt:");
    		scanf("%lf",&gehalt);
    		printf("\nBewertung:");
    		scanf("%i",&bewertung);
    		printf("\nAngestellt seit:\n");
    		scanf("%lf",&angestellt);
    
    					printf("Name:%s\n",name);
    					printf("\nVorname:%s",vname);
    					printf("\nGehalt:%.2lf",gehalt);
    					printf("\nBewertung:%i",bewertung);
    					printf("\nAngestellt seit:%.0lf\n",angestellt);
    					printf("Zum fortfahren 1 drücken zum beenden 0");
    
    					log=freopen("mitarbeiter.txt","a+",stdout);
    					printf("Name:%s\n",name);
    					printf("\nVorname:%s",vname);
    					printf("\nGehalt:%.2lf",gehalt);
    					printf("\nBewertung:%i",bewertung);
    					printf("\nAngestellt seit:%.0lf\n",angestellt);
    
                       scanf("%i",&n);				
                       switch(n)
                       {
                                 case 0:
    
                                  exit(0);
                       case 1:
                        longjmp (sprung , 1);
                       }
    
    }
    

    So das programm funkrioniert bis zur letzten eingabe wenn ich dort 1 eingebe wird das programm trotzdem beendet. wo liegt der fehler der compiler zeigt keine fehler an und wie leite ich die ausgabe wieder zurück um????
    mfg
    timo



  • setjmp(jmp_buf sprung);

    ist bestimmt nicht richtig. Wenn dann setjmp(sprung);



  • wofür überhaupt diese jumps, die sind doch pfui! 😃

    hier eine möglichkeit, wie man ohne jumps auskommt:

    #include ...
    
    int main(void)
    {
        int y,n;
        char quit;  //neu
        FILE *log;
        char ch[80];
        int i,bewertung;
        char name[80],vname[80];
        double gehalt,angestellt;
        printf("\n\tWilkommen bei dem Mitarbeiterverwaltungsprogramm!\n\n");
    
        do{
           //hier der weitere code
         puts("weiter oder quit[q] ?");
       } while ((quit = getchar()) != 'q');
    
       return 0;
    }
    


  • ok hab ich auch schon gelesen das jumps scheiße sind mein problem is ja wie leite ich stdout wieder auf den bildschirm um???



  • timo91 schrieb:

    mein problem is ja wie leite ich stdout wieder auf den bildschirm um???

    WTF??



  • longjmp ist doch nur was für Frickler. 👎



  • longjmp ist soweit ich weiß eher dafür gedacht nach einem fehler denn alten status des programms wiederherzustellen.

    WEnn du schon springen willst benutzt goto.
    Meiner Meinung nach ist es zwar nie gut(oder nur in seltenen fällen) zu springen weil das denn code unübersichtlich macht und schnell zu ungewollten schleifen führen kann, aber wenn dus unbediengt willst ist hier auf jeden fall goto die bessere lösung



  • ok irgendwie glaub ich ihr habt mein problem nich verstanden

    log=freopen("mitarbeiter.txt","a+",stdout);
    

    heier hab ich die ausgabe auf mitarbeiter.txt umgeleitet wie bekomm ich es wieder so hin dass es auf dem bildschirm ausgegeben wird???



  • Also ich versteh dein Problem wirklich nicht...^^
    Solltest du die Daten in eine Datei geschrieben haben, lade diese wieder in ein Array und gib's aufm Schirm aus.



  • So weit ich weiß kann man stdout nicht mehr zurücklenken.



  • timo91 schrieb:

    ok hab ich auch schon gelesen das jumps scheiße sind mein problem is ja wie leite ich stdout wieder auf den bildschirm um???

    Gegenfrage: Wieso leitest du stdout überhaupt von der Bildschirmausgabe weg?



  • damit die arbeit ich umsonst is das einzugeben das soll gespeichert werden gibt es da denn noch eine andere möglichkeit



  • timo91 schrieb:

    gibt es da denn noch eine andere möglichkeit

    Ja, die nennt sich fprintf() (funktioniert genauso wie printf(), bekommt aber zusätzlich ein FILE*, in das geschrieben wird):

    FILE* file=fopen("daten.txt","a");
    
    fprintf(file,"\nName:%s\n",name); 
    fprintf(file,"Vorname:%s\n",vname); 
    fprintf(file,"Gehalt:%.2lf\n",gehalt); 
    fprintf(file,"Bewertung:%i\n",bewertung); 
    fprintf(file,"Angestellt seit:%.0lf\n",angestellt);
    
    fclose(file);
    


  • danke das ich da nich drauf gekommen bin und ich mach mir son stress
    mfg
    timo


Anmelden zum Antworten