C++ - If-Abfrage?
wieso funktioniert dieser Code nicht:
if(Buch.at(counter) == (0 || 1))
Dieser aber schon:
if((Buch.at(counter) == 0) || (Buch.at(counter) == 1))
Siehe auch unten. Ganzer Code
Wieso wird wenn die erste Zahl die man eingibt eine Null ist dann bei der ausgabe abgeschnitten also nicht ausgegeben?
#include <iostream>
#include <vector>
using namespace std;
int main()
{
cout << "Eingabe einer Zahl" << endl;
int zahl;
cin >> zahl;
vector<int>Buch;
while(zahl){
Buch.push_back(zahl%10);
zahl/=10;
}
int GroesseVector = Buch.size();
int counter = 0;
try{
while(GroesseVector - 1 - counter > 0){
if(Buch.at(counter) == (0 || 1)){ //FUNKTIONIERT NICHT
if((Buch.at(counter) == 0) || (Buch.at(counter) == 1)){ //FUNKTINERT
}
else {
throw runtime_error("Es wurde eine Zahl eingegeben die nicht 0 oder 1 ist!");
}
counter++;
}
vector<int> ReverseBuch;
for(int counter = 0; counter < GroesseVector; counter++){
ReverseBuch.push_back(Buch.at(GroesseVector - 1 - counter));
}
for(int counter = 0; counter < GroesseVector; counter++){
cout << "Ausgabe Vector an der Stelle: " << counter << " " << "Inhalt " << ReverseBuch.at(counter) << endl;
}
}
catch(runtime_error &x){
cout << x.what() << endl;
}
}
2 Antworten
Das Ergebniss der verwendung des ||-Operators auf zwei Integers ist ein bool. Du kannst aber ein bool nicht ohne weiteres mit dem Wert aus einem Integer-Vektor vergleichen, zumal das Ergebnis auch nicht das wäre, das du haben möchtest.
Eine 0 als Eingabe tauscht nicht in der Ausgabe auf, da die While-Schleife, die den Wert hinzufügen soll, bereits vor der ersten Iteration abbricht (da 0 als false gewertet wird).
So ist eben die Semantik von C++.
0 || 1 wird von C++ zu true ausgewertet. Anschließend wird überprüft, ob der Ausdruck
Buch.at(counter)
den Wert true hat.
Du möchtest aber überprüfen, ob der Ausdruck den Wert 0 oder 1 hat, also musst du beides in einem Oder-Ausdruck verketten:
Buch.at(counter) == 0 || Buch.at(counter) == 1
Damit wird überprüft, ob Buch.at(counter) den Wert 0 oder ob Buch.at(counter) den Wert 1 hat. Das ist das, was du überprüfen willst.