Vergleichen Array Wert mit Variable Wert



  • d) Arbeite an deiner Einrückung! Manchmal rückst du gar nicht ein, manchmal gleich mehrfach. So lässt sich der Code einfach sehr schlecht lesen.



  • brotbernd schrieb:

    Du initialisierst j mit 0 und die Abbruchbedingung ist j == 0 ('/0'). Du gehst also nie in die for schleife. Du willst wohl eigentlich j=0; j<90; ++j haben. Besser wäre noch einen std::vector und find , bzw. am besten wahrscheinlich ein std::set zu benutzen.

    aha
    ich dachte '/0' ist das Ende des Array danke,
    sehr lg markus



  • markuswenczel schrieb:

    brotbernd schrieb:

    Du initialisierst j mit 0 und die Abbruchbedingung ist j == 0 ('/0'). Du gehst also nie in die for schleife. Du willst wohl eigentlich j=0; j<90; ++j haben. Besser wäre noch einen std::vector und find , bzw. am besten wahrscheinlich ein std::set zu benutzen.

    aha
    ich dachte '/0' ist das Ende des Array danke,
    sehr lg markus

    Nur dass Deine Abbruchbedingung (was brotbernd übersehen hat) nicht prüft, ob i einen bestimmten Wert angenommen hat, sondern ob svn einen beszimmten Wert angenommen hat. Und svn ist zum Zeitpuunkt der ersten Prüfung nicht intialisiert.



  • Tachyon schrieb:

    Nur dass Deine Abbruchbedingung (was brotbernd übersehen hat) nicht prüft, ob i einen bestimmten Wert angenommen hat, sondern ob svn einen beszimmten Wert angenommen hat. Und svn ist zum Zeitpuunkt der ersten Prüfung nicht intialisiert.

    Es wird bei ihm aber wohl "zufällig" funktionieren, weil svn eben irgendetwas != 0 ist. Aber dass es ein weiterer Fehler ist, ist natürlich richtig. svn sollte sinnvoll initialisiert werden und i<90 geprüft werden.

    Edit: und j sollte natürlich nur bis anzahl laufen.



  • Das cout Warning wird nicht ausgegeben wenn svn und der Wert vom Array gleich sind sondern viel öfter
    Ich dachte wenn ich vergleiche

    array[j]==svn;

    dann wird nur ausgegeben wenn der Wert an der Stelle j vom >Array mit der zu
    letzt eingegeben svn übereinstimmt.
    hmmm

    #include <iostream>
    
    using namespace std;
    
    int main(){
    
    int svn=1;
    int anzahl=0;
    int array[90];
    
    for(int i=0; svn!=0;i++) {
    cout<<"Bitte Sozialversicherungsnummer eingeben; Ende = '0'"<<endl;
    cin>>svn;
    anzahl++;
    array[i]=svn;
    
       if(anzahl>2){
    
           for(int j=0;j<anzahl;j++){
                if(array[j]==svn){
                cout<<"WARNING Sozialversicherungsnummer bereits vorhanden"<<endl;
                                 }
    
                                } 
    
                    }
    
                             }                
    
    }
    


  • 😮

    _matze schrieb:

    d) Arbeite an deiner Einrückung! Manchmal rückst du gar nicht ein, manchmal gleich mehrfach. So lässt sich der Code einfach sehr schlecht lesen.

    http://de.wikipedia.org/wiki/Einrückungsstil



  • #include <iostream>
    
    using namespace std;
    
    int main(){
    
    int svn=1;
    int anzahl=0;
    int array[90];
    
    for(int i=0; svn!=0;i++) {
        cout<<"Bitte Sozialversicherungsnummer eingeben; Ende = '0'"<<endl;
        cin>>svn;
        anzahl++;
        array[i]=svn;                            
    
             if(anzahl>=2){
    
                for(int j=0;j<anzahl;j++){
                   if(array[j]==svn){
                   cout<<"WARNING Sozialversicherungsnummer bereits vorhanden<<endl;
                   }
    
                } 
    
              }
    
       }               
    
    }
    


  • _matze schrieb:

    😮

    _matze schrieb:

    d) Arbeite an deiner Einrückung! Manchmal rückst du gar nicht ein, manchmal gleich mehrfach. So lässt sich der Code einfach sehr schlecht lesen.

    http://de.wikipedia.org/wiki/Einrückungsstil

    habe verstanden was du meinst
    aber witzig ist
    C Einrückung
    In der Praxis können diese Klammern nahezu beliebig positioniert werden, so dass sich mehrere verschiedene Stile entwickelt haben, von denen keiner als dominant zu bezeichnen ist.

    Für C++ steht da gar nix



  • markuswenczel schrieb:

    Für C++ steht da gar nix

    Für C++ gilt das gleiche wie für C und für andere Sprachen. Und welchen Stil du verwendest ist egal solange man:
    a) Die Gültigkeitsbereiche daran eindeutig erkennen kann.
    b) Dieser in sich einheitlich ist.

    Ich verwende z.B. privat im wesentlichen den hier als "Allman / BSD / „East Coast“"-Stil bezeichneten (Den ich auch in den meinen vorherigen Firmen bislang immer als den "Standard" vorgefunden habe), und in meiner aktuellen Firma den unter "Variation: Original K&R / Kernel / Linux / UNIX / Stroustrup" benannten, nur mit 4 statt 8 Zeichen Einrücktiefe.



  • markuswenczel schrieb:

    _matze schrieb:

    😮

    _matze schrieb:

    d) Arbeite an deiner Einrückung! Manchmal rückst du gar nicht ein, manchmal gleich mehrfach. So lässt sich der Code einfach sehr schlecht lesen.

    http://de.wikipedia.org/wiki/Einrückungsstil

    habe verstanden was du meinst
    aber witzig ist
    C Einrückung
    In der Praxis können diese Klammern nahezu beliebig positioniert werden, so dass sich mehrere verschiedene Stile entwickelt haben, von denen keiner als dominant zu bezeichnen ist.

    Für C++ steht da gar nix

    Wie asc schon sagte, orientiere dich nicht an einer bestimmten Sprache, sondern rücke konsistent und gut lesbar ein. Regel Nr. 1 ist schon mal: wenn du einrückst, dann rück auch ein! 😉 Das tust du nämlich nur manchmal. Bei deinem letzten Code dachte ich zuerst, dass da eine Klammer zuviel ist, bis ich nachgezählt habe. Das schöne an vernünftiger Einrückung ist aber gerade, dass man nicht nachzählen muss. Dass man immer sehen kann, wo ein Block beginnt und wo er aufhört. Es ist eigentlich ganz einfach. Immer, wenn ein Block beginnt (geschweifte Klammer), rückst du 2/4/8 Zeichen ein (die genaue Anzahl darfst du dir aussuchen, aber dann bleib auch dabei). Und wenn der Block endet, gehst du wieder die gleiche Zahl an Zeichen zurück. Dann sieht dein Code nämlich so aus und ist viel besser lesbar:

    #include <iostream>
    
    using namespace std;
    
    int main() {
    
    	int svn=1;
    	int anzahl=0;
    	int array[90];
    
    	for(int i=0; svn!=0;i++) {
    		cout<<"Bitte Sozialversicherungsnummer eingeben; Ende = '0'"<<endl;
    		cin>>svn;
    		anzahl++;
    		array[i]=svn;                            
    
    		if(anzahl>=2) {
    			for(int j=0;j<anzahl;j++) {
    				if(array[j]==svn) {
    					cout<<"WARNING Sozialversicherungsnummer bereits vorhanden<<endl;
    				}
    			} 
    		}
    	}               
    }
    

    Jetzt kannst du z.B. an jeder schließenden Klammer erkennen, zu welchem Block sie gehört, einfach indem du von der Klammer aus nach oben wanderst. So ist die Einrückung nicht nur lästige Pflicht, "weil man das so macht", sondern sie macht plötzlich Sinn und ist praktisch. 🙂



  • Der Profi C++'ler erreicht mit einem eleganten Schwung die Enter-Taste, bevor er die {-Taste drückt.



  • 314159265358979 schrieb:

    Der Profi C++'ler erreicht mit einem eleganten Schwung die Enter-Taste, bevor er die {-Taste drückt.

    Der Profi C++'ler weiß natürlich, dass er den Stil nach eigenem Gutdünken wählen kann, dass beide Varianten in Ordnung sind und dass letztendlich entweder der eigene Anspruch an Lesbarkeit oder übergeordnete Richtlinien entscheidend sind. 😉



  • 314159265358979 schrieb:

    Der Profi C++'ler...

    ...arbeitet in der Regel nicht für sich Alleine, sondern im Team, und auch wenn er bestimmtes hinterfragen, und vielleicht ändern kann, ist dies dennoch eine Angelegenheit des Teams und nicht des Einzelnen.

    P.S: Und auch wenn ich die öffnende geschweifte Klammer in einer eigenen Zeile vorziehe, und dafür gute Gründe habe, heißt das nicht das ich im "Recht" bin und behaupte das Alle die es anders machen keine Ahnung haben (Das gilt auch für andere Dinge wie "const int a" versus "int const a").



  • asc schrieb:

    ...arbeitet in der Regel nicht für sich Alleine, sondern im Team, und auch wenn er bestimmtes hinterfragen, und vielleicht ändern kann, ist dies dennoch eine Angelegenheit des Teams und nicht des Einzelnen.

    So wahr. Ich bevorzuge zwar die zeilenärmere Variante (Klammer noch in der Zeile der Anweisung), aber ich könnte auch gar nicht anders. Wir haben da noch ein paar uralte Codeparser im Einsatz, die uns viel Code erzeugen und somit eine Menge Arbeit abnehmen. Die sind aber so übel geschrieben, dass eine Klammer in der nächsten Zeile das Ganze aus dem Tritt bringt. 😮 Solange sich also keiner da ransetzt und die Dinger umschreibt, müssen sich sowieso alle an den hier verwendeten Stil halten, ob sie wollen oder nicht. 😞



  • Ich kann nur von meinen Erfahrungen (C#) sprechen, aber ich durfte mir meinen Codestil weitestgehend aussuchen. Dennoch habe ich mich an die Team-Regeln gehalten, da sie ungefähr dem entsprechen, wie ich bisher in C++ programmiert habe. (mit kleinen Unterschieden bei den Namenskonventionen.)



  • 314159265358979 schrieb:

    Ich kann nur von meinen Erfahrungen (C#) sprechen, aber ich durfte mir meinen Codestil weitestgehend aussuchen. Dennoch habe ich mich an die Team-Regeln gehalten, da sie ungefähr dem entsprechen, wie ich bisher in C++ programmiert habe. (mit kleinen Unterschieden bei den Namenskonventionen.)

    Es gibt also irgendwie schon Konventionen, aber jeder darf trotzdem machen, was er will? Seltsam. 😉



  • Es gibt Regeln, wie der Code im Idealfall aussehen sollte, aber man muss sich nicht zu 100% daran halten.



  • ich dachte wenn ich überprüfe die Variable svn
    mit dem Array über Index

    if(array[j]==svn)

    bekomme ich die Ausgabe wenn die svn ein zweites mal eingegeben wird,
    die Ausgabe ist allerdings so das der Wert in der runden Klammer immer
    True ist bitte warum verstehe ich nicht.

    #include <iostream>
    
    using namespace std;
    
    int main(){
    
        int svn=1;
        int anzahl=0;
        int array[90];
            for(int i=0; svn!=0;i++) {
            cout<<"Bitte Sozialversicherungsnummer eingeben; Ende = '0'"<<endl;
            cin>>svn;
            anzahl++;
            array[i]=svn;                            
                if(anzahl>=2){
                    for(int j=0;j<anzahl;j++){
                        if(array[j]==svn){
                        cout<<"WARNING Sozialversicherungsnummer bereits vorhanden"<<endl;
                        }
                    }         
                }
            }               
         }
    


  • for(int j=0;j<anzahl;j++){

    Gehe nur bis j<i, denn bei i (= anzahl-1) ist ja das zuletzt eingefügte. Oder noch sinnvoller, prüfe erst ob es schon vorhanden ist und füge es danach ein. Oder benutze wie schon ganz am Anfang erwähnt vorhandene Klassen, Funktionen der STL.



  • brotbernd schrieb:

    for(int j=0;j<anzahl;j++){

    Gehe nur bis j<i, denn bei i (= anzahl-1) ist ja das zuletzt eingefügte. Oder noch sinnvoller, prüfe erst ob es schon vorhanden ist und füge es danach ein. Oder benutze wie schon ganz am Anfang erwähnt vorhandene Klassen, Funktionen der STL.

    SUPER danke sehr jetzt funktioniert es danke vielmals lg markus


Anmelden zum Antworten