falsche ausgabe mit for-schleife



  • #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    
    {
    int z = 1;
        int i = 0;
        int j = 0;
        ofstream File("ausgabe.txt");
        for(i;i<10;++i);
        {
                        for(j;j<100;++j);
                        {
                                         File<<z<<"; "<<flush;
                                         ++z;
                        }
                        File<<z<<";"<<endl;
                        ++z;
        }
    }
    

    Hi!!!! 😃
    obiger code funzt net! 😞 .
    is der totaler bockmist? 😕
    naja in die datei ausgabe.txt soll er eine tabelle von 1-1000 schreiben, in jeweils 100 zahlen pro reihe.
    dummerweise gibt er immer 1; 2; und dann zeilenumbruch aus!
    wie geht das, das er das richtig macht?
    Hab ich richtig die for-schleife gewählt?
    Kann man das so verschachteln?
    soll ich lieber eine while schleife nehmen?
    oder is der code bockmist und man muss das ganz anders machen?
    Ich bedanke mich für alle antworten!!! :p
    Bis dann
    Elefunty



  • Hallo,

    obiger code funzt net! 😞 .

    keine Fehlerbeschreibung! Lies dir das durch: http://www.lugbz.org/documents/smart-questions_de.html

    naja in die datei ausgabe.txt soll er eine tabelle von 1-1000 schreiben, in jeweils 100 zahlen pro reihe.

    so?:

    1; 2; 3; ... 100;
    101; 102; ...
    

    Geht doch auch einfacher:

    #include <iostream>
    #include <fstream>
    
    int main(int argc, char **argv) {
      std::ofstream ofs("ausgabe.txt");
    
      if (!ofs)
        return 1;
    
      for (int i=0;i<9;++i) {
        for (int j=1;j<=i*100;++j) {
          ofs<<j<<';';
        }
        std::cout<<std::endl;
      }
    
      ofs.close();
    
      return 0;
    };
    

    EDIT: ofs.close() vorher vergessen
    EDIT2: std:: bei ofs<<j<<';'; entfernt

    MfG

    GPC



    for(i;i<10;++i)
    

    anstatt

    for(i;i<10;++i);
    

    Man beachte das Semikolon. Mit Semikolon wird nur der Schleifenkopf ausgeführt, bis die Bedingung nicht mehr true ist, und anschließend nur ein einziges mal der Anweisungsblock direkt darunter.

    Da wahr GPC wohl schneller.

    [edit]
    @GPC:

    std::ofs<<j<<';';  // Zeile 12
    

    std:: entfernen.
    [/edit]



  • proggaholic schrieb:

    [edit]
    @GPC:

    std::ofs<<j<<';';  // Zeile 12
    

    std:: entfernen
    [/edit]

    oh, danke. Die std:: hab ich nachträglich eingefügt, als ich gemerkt habe, dass ich oben kein using namespace std; drinhatte, da muss mir wohl der Fehler unterlaufen sein.

    MfG

    GPC



  • int z = 1;
        ofstream File("ausgabe.txt");
        for(int i=0;i<10;++i)
        {
                        for(int j=0;j<100;++j)
                        {
                                         File<<z++<<"; ";
                        }
                        File<<endl;
        }
    

    vorsichtig!!! in deiner Code immer nach for-Anweisung gibt es semikolon (';') "for(...);"
    das ist nichts anderes als for (...){ } 😉



  • Hat bereits GPC implizit und ich explizit gesagt...aber der Vergleich mit for(...) { } (d.h. mit leerem for -Anweisungsblock) ist besser als meine Erklärung.



  • GPC

    GPC schrieb:

    Zitat:
    obiger code funzt net! .

    keine Fehlerbeschreibung! Lies dir das durch: http://www.lugbz.org/documents/smart-questions_de.html

    wohl ne fehlerbeschreibung

    ich schrieb:

    dummerweise gibt er immer 1; 2; und dann zeilenumbruch aus!

    einfacher finde ich deinen kot nich... noob.. für mich is das wirklich kot

    Proggaholic
    danke für das mit dem semi. ich dachte dasss man das immer ans end schreibt

    damo
    mit dem code funztz jez... thx

    an alle
    natürlich auch ein thx.......

    Bis bald

    Elefunty



  • Elefunty schrieb:

    Proggaholic
    danke für das mit dem semi. ich dachte dasss man das immer ans end schreibt

    Ja, das schreibt man immer ans Ende einer kompletten Anweisung. Und diese Kontrollstrukturen (if, for, while etc.) ergeben erst mit dem anschließenden Befehl eine komplette Anweisung - deshalb gehört kein Semikolon dazwischen.



  • Elefunty schrieb:

    einfacher finde ich deinen kot nich... noob.. für mich is das wirklich kot

    http://de.wikipedia.org/wiki/Code vs. http://de.wikipedia.org/wiki/Kot



  • Um aus der Ausgabedatei wirklich eine Tabelle zu machen, sollte man vielleicht vor jeder Ausgabe die Spaltenbreite einstellen.
    Dafür gibt es den folgenden Befehl:

    Ausgabe.width()
    

    Damit ist die Ausgabedatei viel übersichtlicher ... Das Ganze sieht dann so aus:

    [cpp]#include<cstdlib>
    #include<iostream>
    #include<fstream>
    
    using namespace std;
    
    int main() {
        int z = 1;
        ofstream Ausgabe("C:/Dokumente und Einstellungen/All Users/Desktop/Tabelle.txt");
        for(int i = 1; i <= 10; ++i) {
                for(int k = 1; k <= 100; ++k) {
                        Ausgabe.width(5); Ausgabe << z << ";";
                        ++z;
                }
                Ausgabe << endl;
        }
    
        system("Pause");
    }
    
    [/cpp]
    

    Grüße, Bobby - Karle



  • Oder alternativ mit Manipulatoren:

    Ausgabe << setw(5) << z << ";";
    

    (dafür benötigst du noch ein "#include <iomanip>")


Anmelden zum Antworten