ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
766
766
EMPFEHLEN
-
21.09.06 08:09 #1
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Hallo,
ich komme eigentlich aus der Java-ecke will aber zu C/C++ gehen. Ich hab da mal angefangen ein kleines Java Progrämmchen nach C zu portieren. Momentan soll es nur jedes eingelesene Zeichen wieder als Zeichen auf der Konsole ausgeben.
Das kommt raus wenn ich den Sourcecode(siehe unten) dazu versuche einzulesen:
Code :1 2 3 4 5 6
D:\blub\src>.\bin.exe main.c lol ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺ ☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺
Ich benutze den gcc Compiler.
Dies ist der src dazu:
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]); int printHelp(const char* mes); int main(int argc, char *argv[]) { if (argc!=3 || strcmp(argv[1],"")==0 || strcmp(argv[2],"")==0 ) { printHelp("Didn't found any arguments"); return 1; } FILE *fp; char cha=0; if (fp=fopen(argv[1],"rt")) { while(cha=fgetc(fp)!=EOF){ printf("%c",cha); } puts(""); if (fclose(fp)==EOF) { printf("\nFehler beim Schließen der Datei %s!\n",argv[1]); return -1; } } else { printf("\nFehler beim Öffnen der Datei %s!\n",argv[1]); return -1; } } int printHelp(const char* mes){ printf("%s\nUse: bin [input file] [output file]\n",mes); return 0; }
Vielen Dank schonmal für die HilfeWäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
21.09.06 08:16 #2
- Registriert seit
- Mar 2004
- Beiträge
- 441
Na herzlichen Glückwunsch, da scheint ja alles zu funktionieren.
-
21.09.06 08:19 #3
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Warum krieg ich dann so komische Zeichen ausgegeben und nicht den Text?
Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
21.09.06 08:45 #4
- Registriert seit
- Mar 2004
- Beiträge
- 441
Weil ich keine Ahnung habe, was in deiner Textdatei steht.
-
21.09.06 08:50 #5
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Zitat von Anime-Otaku
Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
21.09.06 09:00 #6
- Registriert seit
- Mar 2004
- Beiträge
- 441
Narf, es ist echt noch zu früh am Morgen.
Also das erste, was mich stutzig macht, ist der Parameter des fopen, das "rt". "r" für "read" leuchtet mir ein, aber was soll das "t" bedeuten?
Ansonsten wird es ohne Debugger knifflig. Ich will es nicht verschreien, aber das sieht für mich nach einem Konvertierungsproblem zwischen Windows-Zeichensatz und ASCII aus. Muß das mal evtl. selber nachprüfen.
-
21.09.06 09:06 #7
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
t steht für text, wobei wenn das t weggelassen wird ist es das selbe.
Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
21.09.06 09:08 #8
- Registriert seit
- Mar 2004
- Beiträge
- 441
Ok, ich kenne es nur ohne "t". Höchstens noch "b" für binary. Dann mal eine kurze Frage:
Du schreibst, daß du den gcc benutzt, aber die Syntax des Aufrufs sieht sehr nach Windows aus. Auf was für einer Plattform arbeitest du? Evtl. kann ich das Programm mal kurz nachbauen und schauen, was passiert.
-
21.09.06 09:24 #9
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Ja momentan arbeite ich auf nem windows Rechner, aber ich will es auch unter Linux zum laufen bekommen, aber ich hatte noch keine Gelegenheit es zu testen.
Ich benutze den GCC Compiler aus dem MingW Projekt. Version 3.4.2, welcher bei Dev-cpp dabei ist.Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
21.09.06 10:09 #10
- Registriert seit
- Mar 2004
- Beiträge
- 441
Ok, ich hab's rausgefunden, war etwas fieser.
Der Wurm liegt hier:
Was du machen willst ist:Code :1 2
while(cha=fgetc(fp)!=EOF){ printf("%c",cha);
cha den Character aus dem Stream zuweisen und dann mit EOF vergleichen.
Was tatsächlich passiert:
Der Character aus dem Stream wird mit EOF verglichen und cha wird das Vergleichsergebnis zugewiesen.
Deswegen bin ich auch kein sonderlicher Freund von solchen Superkurzschreibweisen.
Dieser Code funktioniert:
Code :1 2 3 4 5 6 7
if (fp=fopen(argv[1],"r")) { while(cha!=EOF){ cha=fgetc(fp); printf("%c",cha); } puts(""); ...
Nicht zuviel kürzen, dann kommt man auch nicht mit den Auswertungsprioritäten in Konflikt.
-
21.09.06 10:16 #11
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
tztz da war einer schneller =)
Aber ich wollt noch erwähnen, dass mit eingeschalteten -wall (in dev-cpp unter Werkzeug > Compiler Optionen > Reiter Compiler > [textbox] beim Compiler-Aufruf hinzufügen > dort '-wall' rein) unter anderen auch auf die Fehlerfate Zeile hingewiesen wird.
Ähnliche Themen
-
Einlesen und Auslesen einer Textdatei in Java
Von Homiee im Forum JavaAntworten: 26Letzter Beitrag: 26.03.12, 17:55 -
Einlesen einer Textdatei in einen Array
Von Morphinus21 im Forum JavaAntworten: 28Letzter Beitrag: 03.12.07, 15:00 -
Nur ein teil einer Textdatei einlesen.
Von solae im Forum Visual Basic 6.0Antworten: 13Letzter Beitrag: 09.04.07, 22:32 -
[C++] Die einzelnen Zeilen einer Textdatei einlesen
Von onkelv im Forum C/C++Antworten: 2Letzter Beitrag: 07.10.04, 23:43 -
ANSI C: Inhalt einer Textdatei löschen?
Von Tensi im Forum C/C++Antworten: 4Letzter Beitrag: 11.05.03, 18:34





Zitieren
Login






