2 Schleifen ineinander; brake Anweisung...
-
Ich hab in meinem Programm in einer Funtion 2 Schleifen ineinander gestekt ,weil es (mit meinem Wissen) einfach nicht anders geht , und in der Inneren steht eine "brake" Anweisung und eigentlich müsste dan die Äußere ausgefürt werden aber die Schleifen gehen dan beide aus. Ich kapier nicht warum.
Vieleicht weis ja jemand von Euch den Fehler (is warscheinlich ein ganz dummer Anfängerfehler)
Der Schnippsel kommt aus einer Funtion steht also nicht in "int main()" fals das wichtig ist.
Es geht darum aus einer Datei estwas auszulesen und dan anzuzeigen.while (j_n != 0) { cout << "\nGeben sie den Vornamen, den Nachnamen , das Alter oder die Telefonummer der Person ein die sie suchen:" ; cin >> frage; //Suchen while (dat_ein) { dat_ein >> name >> nachna >> alter >> tele; if(name == frage|nachna == frage|alter == frage|tele == frage) { cout <<"\nEintrag gefunden:\n" << endl; cout <<"=========================================================="<<endl; cout <<"Name: "<< name << endl; cout <<"Nachname: "<< nachna << endl; cout <<"Alter: "<< alter << endl; cout <<"Telefonnummer: "<< tele << endl; cout <<"=========================================================="<<endl; } if(name == frage|nachna == frage|alter == frage|tele == frage) { //Weitersuchen oder nicht cout <<"\nRichtiges Ergebnis?" << endl; cout <<"\"n\" = Weitersuchen" << endl; cout <<"\"j\" = Hauptmenue" << endl; cin >> j_n; if (j_n == 'n') continue; else if (j_n == 'j') break; } } //Die Nichtforhandens//////////////////////////////////////// if(name != frage|nachna != frage|alter != frage|tele != frage) { cout <<"\nKein Eintrag vorhanden\n" << endl; return 0; } }
-
hallo,
ich würde es einfach so machen :
while (j_n != 0) { cout << "\nGeben sie den Vornamen, den Nachnamen , das Alter oder die Telefonummer der Person ein die sie suchen:" ; cin >> frage; int x=1; //Suchen while (x) { dat_ein >> name >> nachna >> alter >> tele; if(name == frage|nachna == frage|alter == frage|tele == frage) { cout <<"\nEintrag gefunden:\n" << endl; cout <<"=========================================================="<<endl; cout <<"Name: "<< name << endl; cout <<"Nachname: "<< nachna << endl; cout <<"Alter: "<< alter << endl; cout <<"Telefonnummer: "<< tele << endl; cout <<"=========================================================="<<endl; } if(name == frage|nachna == frage|alter == frage|tele == frage) { //Weitersuchen oder nicht cout <<"\nRichtiges Ergebnis?" << endl; cout <<"\"n\" = Weitersuchen" << endl; cout <<"\"j\" = Hauptmenue" << endl; cin >> j_n; if (j_n == 'n') x=1; else if (j_n == 'j') x=0; } } //Die Nichtforhandens//////////////////////////////////////// if(name != frage|nachna != frage|alter != frage|tele != frage) { cout <<"\nKein Eintrag vorhanden\n" << endl; return 0; } }ist vielleicht nich schön aber denk es geht so ?
chris
-
Also ich hab mir dein programm nicht wirklich angesehen aber deine zwei schleifen sehen ungefähr so aus
while ( j_n != 0 ) { .... while ( .. ) { .... if ( j_n == 'j' ) // j_n ist jetzt sicher nicht 0 break; // also wird auch die äussere schleife verlassen } }Kurt
EDIT: Vergiss das. Ist Blödsinn
-
Kan sein ,aber eigentlich sollte stat 'j_n' da auch 'frage' stehen und dan funzt das auch nicht

-
Und überhaupt solltest Du vielleicht den logischen oder-operator || statt dem binären oder-operator | verwenden...
-
Etwas deutlicher bitte. Wo sollte 'frage' stehen ?
Kurt
-
hast mein vorschlag probiert ?
chris
-
Jetzt ist's mir klar
if(name != frage|nachna != frage|alter != frage|tele != frage) { cout <<"\nKein Eintrag vorhanden\n" << endl; return 0; }Diese Verzweigung ist immer true also wird return 0 aufgerufen.
sollte wohlif(name != frage&&nachna != frage&&alter != frage&&tele != frage) { cout <<"\nKein Eintrag vorhanden\n" << endl; return 0; }sein
Kurt
-
Ah stimmt das war wohl mein (zimlich dummer) Fehler
, die if Bedingungen sind ja immer wahr:if(name != frage|nachna != frage|alter != frage|tele != frage) { cout <<"\nKein Eintrag vorhanden\n" << endl; return 0; }Also wird auch immer "return 0" ausgeführt, und damit die äussere Schleife beendet.
Besser wäre es wen man stat ODER( | ) irgendwie UND schreiben könnte, also alle Bedingungen wahr sein müssen.
Bedeutet "&&" das ?
Muss das also dan so ausehen wie du das geschrieben hast?if(name != frage&&nachna != frage&&alter != frage&&tele != frage) { cout <<"\nKein Eintrag vorhanden\n" << endl; return 0; }
-
Denke das hat schon jemand erwähnt
|| logisches oder && logisches undKurt
-
Was ist der Unterschied zwischen einem logischen UND "||" und einem binären UND "|"

-
1 & 2 ergibt 0 1 && 2 ergibt trueKurt
edit du wolltes oder1 | 2 ergibt 3 1 || 2 ergibt true
-
Thanks

Ok das hab ich kapiert und wofür steht "**" ?
-
* ist der dereferenzierungs operator ( heisst das so ? )
** dereferenziert dann einen pointer auf einen pointer.
Kurt
-
In welchem Zusammenhang? ** als Operator gibt es nicht, nur * (binär als Multiplikation bzw. unär als Pointer-Dereferenzierung und Typkennung für Pointer)
-
Ich hab das mal so gesehen:
string variable; variable* a
-
Ich hab das mal so oder so änlich gesehen gesehen:
int var, a; var* a
-
Ich hab das mal so oder so änlich gesehen gesehen:
int var, a; var* a
-
Das oben sieht nach Multiplikation aus, eher so:
#include <iostream> using namespace std; int main(int argc, char **argv) { int i = 5, j; int *p = &i; //mit Operator & Adresse von i holen und an p zuweisen j = *p; //Derefenziere p mit Operator * und weise Ergebnis j zu cout<<j<<'\n'; //Gibt 5 aus p = &j; //p zeigt jetzt auf j *p = 215; //p dereferenzieren und 215 zuweisen cout<<j<<'\n'; //Gibt 215 aus return 0; };
-
Diese Code-Fragmente sind so Unsinn. Was ich mir vorstellen könnte wäre:
int*x;//Zeiger auf einen int y=14* *x;//x dereferenziert (->Wert hinter x geholt) und multipliziert
-
break und nicht brake
