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.000000
    

    Die 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!


Anmelden zum Antworten