Problem mit Ausgabe



  • Guten Tag,
    ich habe ein Programm geschrieben aber habe 2 Probleme...

    1. funktioniert die ausgabe in der Konsole "NUR" wenn ich ein "endl" dranhänge, andernfalls gibt es mir garnichts aus.

    2)Das Dokument welches erzeugt wird hat eine leerstelle am anfang der 2.,3. und 4. Zeile. Zusätzlich noch hinter der 4. ...

    Die Daten die das programm nimmt kommen aus einem textdokument..

    #include <conio.h>
    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    int main()
    {
    char Tab[4][23]={0};
    int Zeile=0;
    int Spalte=0;
    char Abbruch = 'x';
    int i =0;
    int Kom1 = 0;
    int Kom2=0;
    int Erg=0;
    
    FILE *ProDat;
    
    ProDat=fopen("Produkt.txt","r");
    
    if(ProDat!= NULL)
    	{
    	cout<<"Die Datei wurde erfolgreich geoeffnet"<<endl;
    	cout<<endl;
    	}
    	else
    		{
    		cout<<"Die Datei wurde nicht geoeffnet"<<endl;
    		exit(1);
    		}
    while(!feof(ProDat))
    	{
    	fgets(Tab[i],22,ProDat);
    	cout<<Tab[i];
    	i++;
    	}
    
    cout<<endl;
    cout<<endl;
    
    for (Zeile = 0; Zeile<=3; Zeile++)
    	{
    	for ( Spalte =0; Spalte<=21;Spalte++)
    		{
    		Tab[Zeile][Spalte] = tolower(Tab[Zeile][Spalte]);
    		if(Tab[Zeile][Spalte] == ',')
    		Tab[Zeile][Spalte] = '-';
    		if(Tab[Zeile][Spalte] == ';')
    		Tab[Zeile][Spalte] = '+';
    		}
    	}
    
    for(Erg = 0; Erg < 6;)
    {//for Erg auf
    
    for (Zeile = 0; Zeile<=3; Zeile++)
    {//for Zeile auf
    
    for ( Spalte =0; Spalte<=22;Spalte++)
    {//for Spalte auf
    
    if(Tab[Zeile][Spalte] == '-')
    {//if Tab='-' auf
    Kom1 = Spalte;
    Spalte= Spalte+1;
    
    for (Spalte; Spalte<=22;Spalte++)
    {//for Spalte++ auf
    
    if(Tab[Zeile][Spalte] == '-')
    {//if Tab='-' auf
    Kom2 = Spalte;
    Erg = Kom2-Kom1;
    
    if(Erg != 6)
    {//if Erg=6 auf
    for (Spalte=22; Spalte>Kom1; Spalte--)
    {//for Spalte-- auf
    Tab[Zeile][Spalte]=Tab[Zeile][Spalte-1];
    }//for Spalte-- zu
    
    if(Spalte==Kom1)
    {//if Spalte=Kom1 auf
    Spalte = Kom1+1;
    Tab[Zeile][Spalte] = '0';
    }//if Spalte=Kom1 zu
    }//if Erg=6 zu
    break;
    }//if Tab='-' zu
    }//for Spalte++ zu
    break;
    }//if Tab='-' zu
    }//for Spalte zu
    }//for Zeile zu
    }//for Erg zu	
    
    cout<<Tab[0]<<Tab[1]<<Tab[2]<<Tab[3]<<endl;
    
    FILE *ProDat1;
    ProDat1=fopen("Maschine.txt","w");
    
    fwrite (Tab, sizeof(Tab[0]) , sizeof(int) , ProDat1 );
    fclose(ProDat);
    fclose(ProDat1);
    
    getch();
    return 0;
    
    }
    

    Die Daten sind (Produkt.txt):

    67663,1082,L,773,32;
    67663,1082,R,773,32;
    67663,920,O,773,32;
    67663,920,U,773,32;

    Es soll nachher so aussehen(Machine.txt):

    67663-01082-l-773-32+
    67663-01082-r-773-32+
    67663-00920-o-773-32+
    67663-00920-u-773-32+

    Danke für die Hilfe im voraus 😋



  • Nulltens: Das Ding sieht ja schlimm aus. Vielleicht solltest du nur jeweils eine Zeile einlesen, verarbeiten und wieder ausgeben. (und simple Textersetzungen kriegst du auch mit replace() hin).

    Erstens:

    funktioniert die ausgabe in der Konsole "NUR" wenn ich ein "endl" dranhänge, andernfalls gibt es mir garnichts aus.

    Die Ausgabe funktioniert schon so, wie sie soll. Allerdings landen die Daten erst einmal in einem Zwischenspeicher und werden erst ans System weitergegeben, wenn dieser voll ist (oder du dem Programm mit flush sagst, daß es das jetzt erledigen soll).

    (endl schreibt erst ein \n und führt danach flush aus)

    Zu zweitens kann ich nichts sagen, aber vermutlich baust du dir diese Leerstellen selber in die Ausgabe ein.



  • ich habe jetzt mal die ganze verarbeitung auskommentiert...
    in der erzeugten datei sind jetzt noch mehr nullstellen am anfang!
    Kann es sein das ich was bei

    fopen
    

    schon falsch gemacht hab?



  • Hallo,
    es wird einfach das in der Datei gespeichert, was in char Tab[4][23] drinsteht.

    Gruß, p.


Anmelden zum Antworten