Warum hängt sich folgendes Programm immer auf???



  • Diese kleine Progarmm soll zum Drucken von TXT benutzt werden können. Es hängt sich aber immer auf. Weiss jemand warum?

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define SEITENLAENGE 65
    #define SCHMAL "1B2873313648" 
    #define NEUE_SEITE "0c"   
    #define NORMAL "1B2873313248" 
    #define MAX_EINGABE 200
    
    FILE *text;		
    
    void left_margin(int rand) {
    	while(rand-- > 0)
    		fprintf(text,"%c",32);  
    }
    
    void kopfzeile(char *dateiname,int linker_rand) {
    	static int seite=1;
    	fprintf(text,"\n");       
    
    	left_margin(linker_rand);
    	fprintf(text,
    				"<<< Seite %3i >>>   von %s\n\n",
    				seite++,dateiname);
    }
    
    void steuerzeichen(char *seq) {
    	char wert;
    	while(*seq) {              
    
    		sscanf(seq,"%2x",&wert);
    
    		fprintf(text,"%c",wert);
    		seq+=2;
    	}
    }
    
    main() {
    	FILE *stream;
    	char dateiname[67]; 
    	int zeile=0;        
    	int linker_rand=10; 
    	char schmal='J';    
    	char eingabe[MAX_EINGABE];  
    	printf("\n\t\t<<< Formatierter Druck >>>");
    	printf("\n\n<RETURN> beendet das Programm.\n");
    
    	printf("\n\nWelche Datei drucken?\n>");
    	gets(dateiname);
    	if(strlen(dateiname) == 0)
    		exit(0);
    	while((stream = fopen(dateiname,"r")) == NULL) {
    		printf("'%s' nicht gefunden!\a\n",dateiname);
    		printf("\nWelche Datei drucken?\n>");
    		gets(dateiname);
    		if(strlen(dateiname) == 0)
    			exit(0);
    	}
    
    	printf("\n<RETURN> uebernimmt die Vorgaben.\n");
    	printf("\nLinker Rand (%i): >",linker_rand);
    	gets(eingabe);
    	if(strlen(eingabe) != 0)
    		linker_rand = atoi(eingabe);
    	printf("\nSchmalschrift J/N (%c): >",schmal);
    	gets(eingabe);
    	if(strlen(eingabe) != 0) {
    		if(eingabe[0] == 'N' || eingabe[0] == 'n')
    			schmal = 'N';
    	}
    
    	text = fopen("LPT1:","a");
    	if (text == NULL) {
    		printf("Fehler beim Oeffnen von LPT1");
    		exit(1);
    	}
    
    	if(schmal == 'J')
    		steuerzeichen(SCHMAL);
    	else
    		steuerzeichen(NORMAL);
    
    	kopfzeile(dateiname,linker_rand);
    	while(fgets(eingabe,MAX_EINGABE,stream)!=NULL) {
    		left_margin(linker_rand);
    		fprintf(text,"%s",eingabe);
    		if(++zeile > SEITENLAENGE-10) {
    			steuerzeichen(NEUE_SEITE);
    			kopfzeile(dateiname,linker_rand);
    			zeile=0;
    		}
    	}
    	steuerzeichen(NEUE_SEITE);
    
    	fclose(stream);
    
    	printf("\nDruck beendet!\a\n");
    }
    


  • Kleiner Tipp: Verwende anstatt gets() fgets(), dann kannst du schon mal ungewollte Bufferoverflows verhinder. (Ist aber ein allgemeiner Hinweis)

    Zu deinem eigentlichen Problem:
    Hast du das Programm schon mal durchdebugged? Ohne zu wissen, wo es genau abstürzt, kann man schlecht was sagen. Also einfach mal das Programm im Debugger starten und schauen, in welcher Zeile das Programm abstürzt. Ruhig öffter mal durchführen und schauen, ob es auch immer die gleiche Zeile ist.



  • es hängt sich ab hier auf

    kopfzeile(dateiname,linker_rand); /*<--HIER DRIN SOLL LAUT DEBUGGER DER FEHLER SEIN*/
        while(fgets(eingabe,MAX_EINGABE,stream)!=NULL) {
            left_margin(linker_rand);
            fprintf(text,"%s",eingabe);
            if(++zeile > SEITENLAENGE-10) {
                steuerzeichen(NEUE_SEITE);
                kopfzeile(dateiname,linker_rand);
                zeile=0;
            }
        }
        steuerzeichen(NEUE_SEITE);
    
        fclose(stream);
    
        printf("\nDruck beendet!\a\n");
    }
    


  • Bist auch in die Funktion mit dem Debugger rein?



  • borland kratzt gleich ab nachdem er diese meldung gebracht hat.



  • Welche Meldung??



  • marcH schrieb:

    kopfzeile(dateiname,linker_rand); /*<--HIER DRIN SOLL LAUT DEBUGGER DER FEHLER SEIN*/
    

    Zu ungenau. Spring mit dem Debugger in die Funktion rein und debugge solange über die Funktionshierarchien, bis es nicht mehr weiter geht oder du bei einer Stadardfunktion (zB fprintf) angekommen bist. Dann schau dir alle Argumente an und überprüfe anhand der Funktionsspezifikationen, was Probleme verursachen könnte.



  • da wär noch ne frage. funktiniert das programm bei euch? borland hat bei mir eh immer den spinner drin da kann man nie sicher sien. wär nett wenns rasch jemand von euch bei sich versuchen würde zu kompillieren und shcaun ob es fehlerlos läuft.


Anmelden zum Antworten