Ausgabe in Tabellenform
-
Ich habe eine Datei, dort steht in jeder Zeile immer eine Zahl.
Diese Zahlen sollen in einer Tabelle mit 6 Spalten ausgegeben werden.Ich habe es hinbekommen, dass zumindest die Zahlen, so, wie sie sind gelesen werden, aber die Ausgabe in Tabellenform klappt noch nicht.
Der Code für das Programm ist folgender
#include <stdio.h> #include <stdlib.h> int main() { FILE *stream ; // FilePointer char dateiname[67] = "DIN6885.DAT" ; // Einzulesende Datei int ch ; system("CLS") ; printf("\nDie Datei beinhaltet folgendes:\n\n") ; //--- Fehlerbehandlung ---// if((stream = fopen(dateiname, "r")) == NULL) { printf("\nFehler beim Oeffnen der Datei!\n\n") ; system("PAUSE") ; exit(1) ; } //--- Ende Fehlerbehandlung ---// ch = fgetc(stream) ; while(!feof(stream)) { putchar(ch) ; ch = fgetc(stream) ; } fclose(stream) ; printf("\n\n") ; system("PAUSE") ; return 0 ; }Ich stehe leider auf dem Schlauch und komme mit der Ausgabe nicht weiter.
Das Problem ist, dass das Programm mit einer while Schleife geschrieben werden muss.Mit einer for Schleife habe ich es wie folgt Lösen können, aber das war leider nicht gefragt.
#include "stdafx.h" #include <fstream> using namespace std; int main() { char x[100]; int flag=0; fstream bla("test.bin",ios::in); for (int i=0; i<=50; i++) { bla.getline(x,100); cout<<x<<"\n"; } return 0; }Könnte mir bitte jemand bei diesem Problem helfen (entweder das obige mit dwhile in der Ausgabe ändern, oder das letzte Programm mit einer While verändern)?
Das wäre echt super!Danke schonmal!
-
Die verschiedenen Schleifentypen lassen sich problemlos ineinander überführen:
for(init;test;inc) anweisung -> init; while(test) { anweisung; inc; }Reicht das schon aus, um deine Aufgabe zu lösen?
PS: Was macht eigentlich der C-Code (printf, etc.) im C++ Board?
-
Sorry, das ich falsch gepostet habe.
Anscheinend benutze ich dann die falsche Sprache. SOll es eigentlich nur in C machen.Aber leider reicht es noch nicht aus.
Habe es so versuicht, aber mir wird nichts ausgegeben.int i=0; i<=50; while (bla) { bla.getline(x,100); cout<<x<<"\n"; i++; }
-
Maskirowska schrieb:
Habe es so versuicht, aber mir wird nichts ausgegeben.
int i=0; i<=50; while (bla) { bla.getline(x,100); cout<<x<<"\n"; i++; }Was steht überhaupt drin in der Datei? Und wie soll das in der Ausgabe zurechtgerückt werden?
*schaut sich nochmal den oberen Code an*
Ich würde das auslesen ja so machen:
while((ch=fgetch(stream)!=EOF) putchar(ch);
-
Das steht in der Datei
22 30 8 7 M3 4.000000 30 38 10 8 M3 5.000000 38 44 12 8 M4 5.000000 44 50 14 9 M5 5.500000 50 58 16 10 M5 6.000000 58 65 18 11 M6 7.000000 65 75 20 12 M6 7.500000 75 85 22 14 M6 9.000000 85 95 25 14 M8 9.000000Die Ausgabe muss wie folgt aussehen:
22 30 8 7 M3 4.000000
30 38 10 8 M3 5.000000
-
Sehe ich das richtig? dort kommen immer 4 Ganzzahlen, dann eine Zeichenkette "M*" und eine Gleitkommazahl?
In dem Fall könntest du ja fscanf und printf verwenden:
while(!feof(stream)) { int v1,v2,v3,v4; char v5[3]; float v6; fscanf(stream,"%d%d%d%d%2s%f",&v1,&v2,&v3,&v4,v5,&v6); printf("%3d%3d%3d%3d %2s %.6f",v1,v2,v3,v4,v5,v6); }
-
Danke.
Mir wäre es auch lieber, mit fscan zu arbeiten.Es sieht im Moment noch so bei mir aus
#include <stdio.h> #include <stdlib.h> int main() { FILE *stream ; // FilePointer char dateiname[67] = "DIN6885.DAT" ; // Einzulesende Datei int ch ; system("CLS") ; printf("\nDie Datei beinhaltet folgendes:\n\n") ; //--- Fehlerbehandlung ---// if((stream = fopen(dateiname, "r")) == NULL) { printf("\nFehler beim Oeffnen der Datei!\n\n") ; system("PAUSE") ; exit(1) ; } //--- Ende Fehlerbehandlung ---// ch = fgetc(stream) ; while(!feof(stream)) { int v1,v2,v3,v4; char v5[3]; float v6; fscanf(stream,"%d%d%d%d%2s%f",&v1,&v2,&v3,&v4,v5,&v6); printf("%3d%3d%3d%3d %2s %.6f",v1,v2,v3,v4,v5,v6); } system("PAUSE") ; return EXIT_SUCCESS; }Leider steckt da ein Fehler drin und ich weiss nicht, wie ich es richtig mache.
Aber echt genial, dass du mir geholfen hast und hoffentlich noch weiter hilfst.
DANKE!

-
Habe es selber gelöst
printf("%3d%3d%3d%3d %2s %.6f \n" ,v1,v2,v3,v4,v5,v6);Trotzdem vielen Dank!