Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » überspringt while schleife. warum?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
17.09.2003, 15:54 Uhr
~kllow
Gast


das programm soll mir eigentlich nen quellcode ordnen
aber irgendwie wird immer die whileschliefe übersprungen und ich weis nicht warum.
kann mir einer vielleicht sagen was ich falsch mache?

C++:
#include <fstream.h>

int main(int argc, char **argv)

{
     ifstream fin(argv[1]); // zum Lesen oeffnen
     ofstream fout("kopie.txt"); // zum Schreiben oeffnen
    

        fin.open(argv[1]);
        const int buffer = 2;
        char ch[buffer + 1];

        
        
        
        while (fin.get(ch,buffer))
        {
            
            
                
                if (ch[0] == '{' || ch[1] == '{')
                {
                                    
                    fout << "\n{\n";
                }
            
                else
                {
                    if (ch[0] == '}' || ch[1] == '}')
                    {
                        fout << "\n}";
                    }
                        
                    else
                    {
                        if (ch[0] == '{' && ch[1] == '}')
                        {
                            fout << "{ }";
                        }
                        else
                        {
                            fout << ch[0];
                        }    
                    }
                }
        }
        
    fin.close();  
    fout.close();
    return 0;
}



Bearbeitung von loddab:
cpp-Tags gesetzt

Dieser Post wurde am 17.09.2003 um 15:56 Uhr von Loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.09.2003, 16:07 Uhr
Tommix



Hallo,
das

C++:
fin.open(argv[1]);


ist zu viel.


Bearbeitung:

Ausserdem besser

C++:
while (fin.getline(ch,buffer))


sonst hängt er bei den Newlines.
Wieso liest Du immer zwei Zeichen?



Gruss, Tommix

Dieser Post wurde am 17.09.2003 um 16:14 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.09.2003, 16:24 Uhr
0xdeadbeef
Gott
(Operator)


char*s verursachen gerne Speicherlöcher, von daher würde ich für zeilenweises Lesen das hier empfehlen:

C++:
std::string line;
//...
while(std::getline(fin, line)){
  //...
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.09.2003, 17:33 Uhr
~kllow
Gast


wollt eigentlich das das prog:
Rectangle(){}
so ne methode so läst
und
Rectangle(){wenn was drin steht dann }
...
Rectangle()
{
wenn was drin steht dann soll es so aussehn
}

nur irgenwie hab i keine idee dazu wie ich das anstellen soll

ps. die tips haben funktioniert thx
... das proggramm läuft wider aber halt noch net so wie es schluss endlich laufen soll
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.09.2003, 20:28 Uhr
~kllow
Gast


könnt ihr mir keine tips geben wie ich das verwirklichen kann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.09.2003, 21:11 Uhr
0xdeadbeef
Gott
(Operator)


Naja, du müsstest erstmal genau definieren, was du eigentlich willst. Zum Beispiel musst du sinnvoll solche:

C++:
Rectangle() { //<-- Leerzeichen zwischen ) und {
}


von solchen:

C++:
Rectangle()
  { //<-- Leerzeichen vor {
  }


Also, was willst du eigentlich? Wenn nur Leerzeichen zwischen ) und { stehen, diese durch ein newline ersetzen? Dann sieht dein Code nachher so aus:

C++:
if(bla)
{
    if(bli)
{
        if(blu
{
//...


Das nachher zu programmieren, ist nicht soo schwer, aber da ist einiges an Design-Arbeit zu leisten.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.09.2003, 14:44 Uhr
~kllow
Gast


also gut i versuchs nomol zu erklären:


C++:
#include <iostream.h>

class Rectangle
{
public:
// Konstruktoren
Rectangle(int width, int height);
~Rectangle(){}


void DrawShape() const;
void DrawShape(int aWidth, int aHeight) const;

private:
int itsWidth;
int itsHeight;
};

Rectangle::Rectangle(int width, int height)
{
itsWidth = width;
itsHeight = height;
}


  void Rectangle::DrawShape() const
{
DrawShape( itsWidth, itsHeight);
}


void Rectangle::DrawShape(int width, int height) const
{
for (int i = 0; i<height; i++)
{
for (int j = 0; j< width; j++)
{
cout << "*";
}
cout << "\n";
}
}


int main()
{
// Ein Rechteck mit 30,5 initialisieren
Rectangle theRect(30,5);
cout << "DrawShape(): \n";
theRect.DrawShape();
cout << "\nDrawShape(40,2): \n";
theRect.DrawShape(40,2);
return 0;
}



dieser text soll z.B. eingelesen werden
und das prog soll mir dann den folgenden text
in eine andere datei schreibn:


C++:
#include <iostream.h>

class Rectangle
{
     public:
     // Konstruktoren
     Rectangle(int width, int height);
     ~Rectangle(){}


     void DrawShape() const;
     void DrawShape(int aWidth, int aHeight) const;

     private:
     int itsWidth;
     int itsHeight;
};

Rectangle::Rectangle(int width, int height)
{
     itsWidth = width;
     itsHeight = height;
}


void Rectangle::DrawShape() const
{
    DrawShape( itsWidth, itsHeight);
}

void Rectangle::DrawShape(int width, int height) const
{
    for (int i = 0; i<height; i++)
    {
        for (int j = 0; j< width; j++)
        {
            cout << "*";
        }
        cout << "\n";
    }
}


int main()
{
    // Ein Rechteck mit 30,5 initialisieren
    Rectangle theRect(30,5);
    cout << "DrawShape(): \n";
    theRect.DrawShape();
    cout << "\nDrawShape(40,2): \n";
    theRect.DrawShape(40,2);
    return 0;
}



1*
so jetzt folgendes wie kann ich zwei aufeinander folgende zeichen vergleichen?
so das er mir bei
{ = "\n{\n"
bei
} = "\n{\n"
und wenn beide gleich hintereinander kommen {} also nix drin steht
dann soll er auch nur "{} " ausgeben
2*
wie kann man es anstellen das nach jeder { klammer der folgende text um eine TAB taste verschoben wir?
[edit by virtual: smilies tot]

Dieser Post wurde am 18.09.2003 um 14:48 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.09.2003, 14:45 Uhr
~kllow
Gast


ups die smilies im quelltext gehören net dazu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.09.2003, 14:50 Uhr
virtual
Sexiest Bit alive
(Operator)


Willst Du das unbedingt selbst programmieren, oder kennst du das Programm indent nicht?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.09.2003, 14:50 Uhr
0xdeadbeef
Gott
(Operator)


Also jetzt doch keine {} -> {
} - Umwandlung. Hm. Wie wärs mit

C++:
system("indent");


? Weia...das ist schon wieder richtig aufwändig, was du da vorhast.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: