Array einbauen aber wie



  • Hallo ich muss in diesen code bei eindat=fopen(dateiname, "r"); ein array einabauen aber wie ?

    #include <iostream>
    #include <fstream>
    #include <conio.h>
    
    using namespace std;
    
    int einlesen (int &, int & , int &);
    int einlesen_datei ();
    
    int einlesen_datei()
    {
        FILE *eindat;
        char dateiname[20]="ausgabe.txt";
        int wert1, wert2, wert3, wert4, wert5, wert6, wert7, wert8, wert9, wert10, wert11, wert12,wert13,wert14,wert15,wert16,wert17,wert18,wert19,wert20,wert21,wert22,wert23,wert24,wert25,wert26,wert27,wert28,wert29,wert30;
    
        eindat=fopen(dateiname, "r");
        fscanf (eindat, "%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d",&wert1,&wert2,&wert3,&wert4,&wert5,&wert6,&wert7,&wert8,&wert9,&wert10,&wert11,&wert12,&wert13,&wert14,&wert15,&wert16,&wert17,&wert18,&wert19,&wert20,&wert21,&wert22,&wert23,&wert24,&wert25,&wert26,&wert27,&wert28,&wert29,&wert30);
        fclose(eindat);
    
      // cout << "\n\nVon der Datei "<<dateiname<<"eingelesener 1.Wert "<< wert1 <<" 2.Wert"<< wert2 << "Wert 3 ist" << wert3;
        if (wert1*wert1 + wert2*wert2 == wert3*wert3)
            cout << "Rechtwinklig "<<wert1<<wert2<<wert3<< "\n";
            else
                    cout << "Fehler 1\n";
            if (wert5*wert5 - wert4*wert4 == wert6*wert6)
            cout << "Rechtwinklig "<<wert4<<wert5<<wert6<< "\n";
            else
                    cout << "Fehler 1\n";
             if (wert7*wert7 - wert8*wert8 == wert9*wert9)
            cout << "Rechtwinklig "<<wert7<<wert8<<wert9<< "\n";
            else
                    cout << "Fehler 1\n";
    
            if (wert10*wert10 - wert11*wert11 == wert12*wert12)
            cout << "Rechtwinklig "<<wert10<<wert11<<wert12<< "\n";
            else
                    cout << "Fehler 1\n";
    
    if (wert14*wert14 - wert13*wert13 == wert15*wert15)
            cout << "Rechtwinklig "<<wert13<<wert14<<wert15<< "\n";
            else
                    cout << "Fehler 1\n";
    
            if (wert17*wert17 + wert16*wert16 == wert18*wert18)
            cout << "Rechtwinklig "<<wert16<<wert17<<wert18<< "\n";
            else
                    cout << "Fehler 1\n";
    
        if (wert19==wert20 && wert19 < wert21)
                    cout << "Gleichschenkliges " << wert19<< wert20<< wert21 << "\n";
            else
                    cout << "Fehler 2\n";
    
                if (wert22 == wert24 && wert22 < wert23)
                    cout << "Gleichschenkliges " << wert22<< wert23<< wert24 << "\n";
            else
                    cout << "Fehler 5" << wert22<<" "<< wert23<<" "<< wert24 << "\n";
    
                if (wert27 == wert26 && wert27 < wert25)
                    cout << "Gleichschenkliges " << wert25<< wert26<< wert27 << "\n";
            else
                    cout << "Fehler 5" << wert17<< wert18<< wert16 ;
    
             if (wert28 == wert29 && wert28 ==  wert30)
                    cout << "Gleichseitiges " << wert28<< wert29<< wert30<< "\n";
            else
                    cout << "Fehler 5"  ;
    
        return 0;
    
    }
    
    int main ()
    {
        einlesen_datei();
        getch();
    
    }
    

    bitte um Hilfe



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Hilf dir, dir selbst zu helfen! Lies ein Buch! Wir können hier keinen kompletten Überblick über Arrays vermitteln. Das was du vor hast ist ziemlich einfach, die Lösung sollte dich quasi anspringen wenn du dich auch nur 20 Minuten mit Arrays beschäftigst. Vielleicht hilft dir diese ganz kurze Übersicht:

    Anstatt

    int wert0, wert1, wert2
    

    zu schreiben wenn man 3 int-Werte braucht, kann man auch ein Array mit 3 Elementen nehmen:

    int wert[3];
    

    Die drei Variablen die in dem Array stecken heißen nun:
    wert[0] , wert[1] und wert[2] . (⚠ Arrays gehen immer bei 0 los! ⚠ )

    Wo liegt der Unterschied zu wert0 , wert1 und wert2 ? Der Unterschied ist der, dass die Zahl am Ende nicht mehr zum Namen gehört, sondern eine ganz normale Zahl ist, mit der man rechnen kann (genannt der Index). Vorher konnte man sowas nicht machen: wert1+1 ist nicht wert2 .
    Aber bei Arrays kann man das machen: wert[1+1] ist wert[2]

    Das ist ja schon einmal ein Fortschritt, aber der Brüller ist das noch nicht. Toll wird das erst, weil wir als Index auch Variablen nehmen können:

    int index=1;
    wert[index]   // Entspricht Wert von 1
    

    Das kann man aber ganz toll mit Schleifen koppeln:

    tuwas(wert1);
    tuwas(wert2);
    tuwas(wert3);
    
    // Wird zu:
    int index;
    for(index=0; index < 3; ++index) tuwas(wert[index]);
    

    Das ist zwar nicht viel kürzer, aber wenn man das jetzt mit 30 verschiedenen Werten macht, dann müsste man ohne Arrays 30 Zeilen schreiben, aber die Schleife bleibt trotzdem ein Zweizeiler.

    So, das waren Arrays in a nutshell. Und trotzdem ist es ein recht langer Forenbeitrag. Für dein Problem reicht dies zwar schon aus, aber ich habe hier nur ganz an der Oberfläche des Themas gekratzt. Also nochmals die Aufforderung: Lies ein Buch! Es wird dir gut tun!



  • ok hab es jetzt amal durch dich nacht groß geändert aber ich hab nen fehler der mir nicht ins auge springen will dei anwendung schlist sich gleich nach dem sie offen ist

    #include <iostream>
    #include <fstream>
    #include <conio.h>
    
    using namespace std;
    
    struct Test   // Logische zusammenhängede daten unter den Namen  "TEST"
    
    {
        int wert1;
        int wert2;
        int wert3;
    };
    
    int Dreieck (int seitea, int seiteb, int seitec) ;
    
    int main ()
    {
        Test Ar[30]; // Das struct wird eingesetzt und einem Array
    
        ifstream Daten ("ausgabe.txt");
    
        for (int index=0;index < 29; index++) // index < 29 da es 28 datensätze werden sollen
        {
            Daten >> Ar[index].wert1 >> Ar[index].wert2 >> Ar[index].wert3;
            cout << "Bitte Werte eingeben" << endl;
            cout << "Wert 1: " << Ar[index].wert1;
            cin >> Ar[0].wert1;
            cout << "Wert 2: " << Ar[index].wert2;
            cin >> Ar[1].wert2;
            cout << "Wert 3: " << Ar[index].wert3;
            cin >> Ar[2].wert3;
            cout << "\n" << Dreieck (Ar[index].wert1 , Ar[index].wert2 , Ar[index].wert3);
        }
        return 0;
    }
    
    int Dreieck (int seitea, int seiteb, int seitec)
    {
            if ( seitea<(seitea+seiteb) && seiteb<(seitea+seitec) && seitec<(seitea+seiteb) )
            {
                    if (seitea == seiteb && seiteb == seitec)
                            return 1;
                    if (seitea == seiteb || seiteb == seitec || seitea == seitec)
                            return 2;
                    if (((seitec*seitec)+(seiteb*seiteb))==(seitea*seitea)||((seitea*seitea)+(seitec*seitec))==(seiteb*seiteb)||((seitea*seitea)+(seiteb*seiteb))==(seitec*seitec))
                    {
                            if (seitea==seiteb||seiteb==seitec||seitea==seitec)
                                    return 5;
                            else
                                    return 4;
                    }
                    return 3;
            }
    
            return 0;
    }
    


  • Der Einfachheit halber: pack mal ein "getchar();" vor das return deiner main-Funktion. Dann wird vor dem Schließen der Konsole noch ein Keyboard-Input verlangt.



  • Hi!

    Legenda schrieb:

    ok hab es jetzt amal durch dich nacht groß geändert aber ich hab nen fehler der mir nicht ins auge springen will dei anwendung schlist sich gleich nach dem sie offen ist

    Passt jetzt gerade nicht zum Thema, aber es wäre nett, wenn du dir, bevor du postest, deinen Text nochmal durchlesen würdest, damit er nicht voller Fehler ist (Groß/Kleinschreibung, Tippfehler, ...). Ein paar Satzzeichen würden auch nicht schaden. Erleichtert die Lesbarkeit. 🙂

    mfg



  • Sry, ich hab nun das Problem das nicht die Daten eingelesen werden die ich in der Ausgabe.txt kann das sein, das es bei mir ein Problem is das ich ein Array hab und dann int Zahlen?



  • Legenda schrieb:

    Sry, ich hab nun das Problem das nicht die Daten eingelesen werden die ich in der Ausgabe.txt kann das sein, das es bei mir ein Problem is das ich ein Array hab und dann int Zahlen?

    Nein. Arrays sind kein Problem. Vielleicht wird deine Datei nicht gefunden?

    char* fname = "wtf?!";
    	ifstream in ( fname );
    	if ( false == in.is_open() )
    		cout << "Can't open " << fname << endl;
    

    Gruß,
    B.B.



  • Danke für die antwort jetzt bekomm ich den Fehler das char und int Fehler machen

    C:/Users/Legenda/Documents/ein_aus_struct/main.cpp:55: error: invalid operands of types `char[20]' and `int' to binary `operator>>'



  • Die Fehlermeldung deutet auf eine falsche Benutzung des istream-Operators hin.
    Die Codezeile 55 in main.cpp wäre eine große Hilfe um dir zu sagen, was genau falsch ist.

    Der Fehler tritt z.B. bei sowas auf:

    char a[40];
    	int b;
    
    	"test" >> b;
    

    Sowas geht natürlich nicht. In diesem Fall wird ein Shift-Operator angenommen.

    richtig wäre die Verwendung eines istream-Objekts wie z.B. cin oder in deinem
    Fall bei Dateiarbeit von ifstream.

    cin >> b;
    
    ifstream in ( fname );
    in >> b;
    [...]
    

Log in to reply