Probleme bei Programm einlesen/ausgeben von dateien



  • Hoi, schreibe gerade ein Programm das Textdateien einlesen und später in eine andere schreiben soll. Bin jetzte soweit beim einlesen der Datei un bekomme folgende Fehlermeldung:
    44: error: syntax error before numeric constant
    Da das mit dem einlesen noch etwas neu für mich ist weis ich jetzt nix damit anzufangen >-<

    Mein code:

    #include <stdio.h>
    
    int readmydata(FILE *quelldatei);
    
    int main(int argc, char* argv[])
    {
    	FILE *quelldatei, *zieldatei;
    
    	//Überprüfung auf richtige Eingaben
    
    	//Sind genug Parameter beim Start angegeben?	
    	if(argc!=3)
    		{
    		printf("\nFehler bei der Eingabe. Beispiel: <Programm> <Quelldatei> <Zieldatei>.\n");
    		return 1;
    		}
    
    	//Überprüfung der Quelldatei
    	if ((quelldatei = fopen(argv[1],"rt")) == NULL) 
    		{
    		printf("\nDatei %s kann nicht geöffent werden! Bitte überprüfen Sie Ihre Eingabe.\n", argv[1]);
    		return 1;
    		}
    
    	//Überprüfung der Quelldatei
    	if ((zieldatei = fopen(argv[2],"wt")) == NULL) 
    		{
    		printf("\nDatei %s kann nicht geöffent werden! Bitte überprüfen Sie Ihre Eingabe.\n", argv[2]);
    		fclose(quelldatei);
    		return 1;
    		}
    
    	readmydata(quelldatei);
    
    	fclose(quelldatei);
    	fclose(zieldatei);	
    	return 0;
    }
    
    int readmydata(FILE *quelldatei)
    {
    char buffer[100];
    
    char *fgets(char *buffer, 100, FILE *quelldatei);
    printf("%s", buffer);
    return 0;
    
    }
    


  • Man gibt bei einem Funktionsaufruf weder den Rückgabewert noch die Parametertypen an.



  • Sorry, vielleichts liegts dadran das ich mir so lange den kopf drüber zerbreche aber ich raffs ned 😞



  • Athar meint folgende Zeile

    char *fgets(char *buffer, 100, FILE *quelldatei);
    

    und die sollte dann wohl so heißen

    fgets(buffer, 100, quelldatei);
    


  • Supi, danke 🙂

    Habs jetzt aber schon mit ner anderen angehensweise hinbekommen, benutzerfreundlicher und so 😛

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
    	double eingeleseneWerte[255];
    	char quelldatei[20], zieldatei[20];
    	int laenge, schalter = 0;
    
    	printf("\n\n\n\n*********************************************\n\n");	
    	printf("Programm zum Einlesen und Ausgeben von Daten:");
    	printf("\n\n*********************************************\n\n\n");
    
    	//Eingabe der Quelldatei
    	do
    	{
    		schalter = 0;
    		printf("\n\nBitte geben Sie den Namen der Datei ein die eingelesen werden soll:\n");
    		fgets(quelldatei, 50, stdin);
    		laenge=strlen(quelldatei);
      		quelldatei[laenge-1]='\0';
    
      		//Überprüfung ob Quelldatei geöffnet werden kann
    		if ((fopen(quelldatei,"r")) == NULL) 
    			{
    			printf("\nDatei %s kann nicht geöffent werden! Bitte überprüfen Sie Ihre Eingabe.\n", quelldatei);
    			schalter = 1;
    			}
    	}
    	while(schalter!=0);
    
    	//Eingabe der Zieldatei
    	do
    	{
    		schalter = 0;
    		printf("\n\nBitte geben Sie den Namen der Datei ein die ausgegeben werden soll:\n");
    		fgets(zieldatei, 50, stdin);
    		laenge=strlen(zieldatei);
    	  	zieldatei[laenge-1]='\0';
    
      		//Überprüfung ob Zieldatei geöffnet werden kann
    		if ((fopen(zieldatei,"w")) == NULL) 
    			{
    			printf("\nDatei %s kann nicht geöffent werden!\n", zieldatei);
    			printf("Die Datei existiert bereits und ist möglicherweise Schreibgeschützt.\n");
    			schalter = 1;
    			}
    	}
    	while(schalter!=0);	
    
    ...
    

    Trotzdem vielen vielen dank für die hilfe 🙂



  • Hoi da bin ich wieder. Hab wieder ein kleine Prob wo ich nicht weiterkomme 🙂
    Bin soweit eigentlich fast fertig mit meinem prog nur hab ich bei der ausgabe ein problem.
    der code der ausgabefunktion

    void plot2d(double *werte, FILE *file, int maxMessreihe)
    {
    	int i, j, runden;
    	float step = 0;
    	double minimum = werte[0], maximum = werte[0];
    
    	//Maximalwert und Minimalwert fuer Y-Achse rausfinden
    	for(i = 0; i < maxMessreihe; i++)
    	{
        	if(werte[i] < minimum) minimum = werte[i];
        	if(werte[i] > maximum) maximum = werte[i];
    	}
    
    	//Berechnung der Schrittweite
    	step = (float)((maximum - minimum) / (maxMessreihe - 1));
    
    	//Ausgabe
    	fprintf(file, "  ______________________   Werte\n");
    	for(i=maxMessreihe;i>0;i--)
    	{
    		fprintf(file, "  |");
    		for(j=0;j<maxMessreihe;j++)
    		{
    			fprintf(file, " ");
    
    			if(fabs((werte[j]) - (minimum + (i*step))) < step / 2)
    			{
    				fprintf(file, "x");
    			}
    			else
    			{
    				fprintf(file, " ");
    			}
    		}
    		fprintf(file, "| %8.4f\n", werte[i-1]);
    	}
    	fprintf(file, "<-|-|-|-|-|-|-|-|-|-|-|->\n  0 1 2 3 4 5 6 7 8 9 10\n\n");
    }
    

    Gibt folgendes aus. (Die werte wurden aus einer datei ausgelesen und hier weiterverwendet.

    ______________________   Werte
      |                    |   9.9271
      |               x x  |   9.6052
      |             x      |   9.0345
      |         x x        |   8.2298
      |                    |   7.2120
      |       x            |   6.0074
      |     x              |   4.6472
      |   x                |   3.1667
      |                    |   1.6041
      | x                  |   0.1000
    <-|-|-|-|-|-|-|-|-|-|-|->
      0 1 2 3 4 5 6 7 8 9 10
    

    Nun will ich aber das der unter verwendung der werte aber dieses ausgibt=

    ______________________   Werte
      |                   x|   9.9271
      |                 x  |   9.6052
      |               x    |   9.0345
      |             x      |   8.2298
      |           x        |   7.2120
      |         x          |   6.0074
      |       x            |   4.6472
      |     x              |   3.1667
      |   x                |   1.6041
      | x                  |   0.1000
    <-|-|-|-|-|-|-|-|-|-|-|->
      0 1 2 3 4 5 6 7 8 9 10
    

    Hab schon ein wenig herumprobiert.
    Das Problem ist das die ausgabe um eine Zeile nach unten verschoben ist und bei Zahlen mit nachkomma die linie krumm wird(bei geraden klappts perfekt.
    Die Zeile:

    if(fabs((werte[j]) - (minimum + (i*step))) < step / 2)
    

    ist von einem Freund von mir was bei geraden zahlen super funktioniert bei zahlen mit nachkomma aber nicht.

    könntser mir helfen?



  • Also bei mir klappt das vorne und hinten nicht. Folgendes hab ich ausprobiert:

    #include <stdio.h>
    #include <math.h>
    
    void plot2d(double *werte, FILE *file, int maxMessreihe)
    {
        int i, j, runden;
        float step = 0;
        double minimum = werte[0], maximum = werte[0];
    
        //Maximalwert und Minimalwert fuer Y-Achse rausfinden
        for(i = 0; i < maxMessreihe; i++)
        {
            if(werte[i] < minimum) minimum = werte[i];
            if(werte[i] > maximum) maximum = werte[i];
        }
    
        //Berechnung der Schrittweite
        step = (float)((maximum - minimum) / (maxMessreihe - 1));
    
        //Ausgabe
        fprintf(file, "  ______________________   Werte\n");
        for(i=maxMessreihe;i>0;i--)
        {
            fprintf(file, "  |");
            for(j=0;j<maxMessreihe;j++)
            {
                fprintf(file, " ");
    
                if(fabs((werte[j]) - (minimum + (i*step))) < step / 2)
                {
                    fprintf(file, "x");
                }
                else
                {
                    fprintf(file, " ");
                }
            }
            fprintf(file, "| %8.4f\n", werte[i-1]);
        }
        fprintf(file, "<-|-|-|-|-|-|-|-|-|-|-|->\n  0 1 2 3 4 5 6 7 8 9 10\n\n");
    } 
    
    int main(void)
    {
    	double test[6];
    	test[0] = 1;
    	test[1] = 2;
    	test[2] = 3;
    	test[3] = 6;
    	test[4] = 7;
    	test[5] = 8;
    
    	plot2d(test, stdout, 6);
    
    	return 0;
    }
    

    Ausgabe:

    ______________________   Werte
      |            |   8.0000
      |           x|   7.0000
      |       x x  |   6.0000
      |            |   3.0000
      |            |   2.0000
      |   x x      |   1.0000
    <-|-|-|-|-|-|-|-|-|-|-|->
      0 1 2 3 4 5 6 7 8 9 10
    


  • hab mal selbst etwas gebastelt und das ist dabei herausgekommen:

    #include <stdio.h> 
    #include <stdlib.h>
    #include <math.h> 
    
    void plot2d(double *werte, FILE *file, int maxMessreihe) 
    { 
        int i, j, runden, maximal = maxMessreihe;
    	int izahlen[50];
        double step = 0; 
    
    	//Schritt berechnen ?!?!?!?!?!?!?!?!?!?!
    
    	step = (werte[maxMessreihe-1] - werte[0]) / (maxMessreihe-1);
    
    	printf("%lf \n", step);
    
    	for(i = 0; i < maxMessreihe; i++)
    		werte[i] = werte[0] + step * i;
    
    	//zahlen runden und ausgeben
    
    	for(i = 0; i < maxMessreihe; i++) {
    		werte[i] = werte[i] + 0.5;
    		izahlen[i] = (int) werte[i];
    	}
    
    	printf("  _________________________ werte\n");
    	for(i = 0; i < maxMessreihe; i++){
    		printf("  |");
    		for(j = 0; j < 12; j++) {
    			if(izahlen[i] == j) { 
    				printf(" x");
    				//break;
    			}
    			else
    				printf("  ");
    		}
    		printf("| %#.2lf = %4d\n", werte[i] - 0.5, izahlen[i]);
    	}
    
    	printf("<---|-|-|-|-|-|-|-|-|-|-|->\n    0 1 2 3 4 5 6 7 8 9 10\n\n"); 
    
    } 
    
    int main(void) 
    { 
        double test[6]; 
        test[0] = 1.2; 
        test[1] = 2.6; 
        test[2] = 3; 
        test[3] = 6.4; 
        test[4] = 7; 
        test[5] = 8; 
    
        plot2d(test, stdout, 6); 
    	getchar();
    
        return 0; 
    }
    

Anmelden zum Antworten