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 ausgabefunktionvoid 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; }