Anfänger frage zu einer IF abfrage
-
Guten morgen
Also ich beschäftige mich nun seid knapp 1 Woche mit C++ und versuche es zu lernen.(bin zurzeit im Praktikum als Fachinformatiker - anwendungsentwickler)
Nun hab ich die Aufgabe erhalten ein Code zu schreiben mit arrys und verschiedenen sachen, jedoch komm ich irgendwie nicht weiter.
#include <iostream> #include <string> #include <iomanip> int main() { char zahl[5]; std::cout << "Willkommen in meiner \"Quersummenausrechnung\" \n" <<std::endl; std::cout << "Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!\n"<< std::endl; std::cout << "Bitte geben sie eine 4-stellige Zahl ein: "; std::cin >> zahl; std::cout << "Die eingegebene Zahl lautet " << zahl << "\n" << std::endl; int ergebnis1; if ((int)zahl > 999 && (int)zahl < 10000 ) { ergebnis1 = (zahl [0] + zahl[1] + zahl[2] + zahl[3]) - (4*48); std::cout << "Die Quersumme lautet: " << ergebnis1 << std::endl; } else if ((int)zahl > 10000) { std::cout << "Ihre Zahl ist zu hoch"<<std::endl; std::cout << (int)zahl; } else if ((int)zahl < 1000) { std::cout << "Ihre Zahl ist zu klein" <<std::endl; std::cout << (int)zahl; } else { std::cout << "Sie haben ungueltige Zeichen eingetragen."; std::cout << (int)zahl; } }
Das problem ist das ich egal was ich eingebe immer 2686679 raus erhalte. Wenn ich bei der ersten if schleife < 1000000 eingebe jedoch die richtige zahl (aber dann auch immer obwohl ich z.b 4 eintrage) Ich denke es liegt daran das die Zahl
falsch übertragen wird in die ifschleife.Danke
-
Hab das Problem nun so gelöst durch ein tipp vom arbeitskollegen
#include <iostream> #include <string> #include <iomanip> int main() { int zahl; std::cout << "Willkommen in meiner \"Quersummenausrechnung\" \n" <<std::endl; std::cout << "Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!\n"<< std::endl; std::cout << "Bitte geben sie eine 4-stellige Zahl ein: "; std::cin >> zahl; std::cout << "Die eingegebene Zahl lautet " << zahl << "\n" << std::endl; int ergebnis1; char number[5]; if (zahl > 999 && zahl < 10000 ) { zahl = number[5]; ergebnis1 = (number [0] + number[1] + number[2] + number[3]) - (4*48); std::cout << "Die Quersumme lautet: " << ergebnis1 << std::endl; } else if (zahl > 10000) { std::cout << "Ihre Zahl ist zu hoch"<<std::endl; std::cout << zahl; } else if (zahl < 1000) { std::cout << "Ihre Zahl ist zu klein" <<std::endl; std::cout << zahl; } else { std::cout << "Sie haben ungueltige Zeichen eingetragen."; std::cout << zahl; } }
-
Baldry schrieb:
Hab das Problem nun so gelöst durch ein tipp vom arbeitskollegen
#include <iostream> char number[5]; //Array mit 5 Zeichen start bei 0 if (zahl > 999 && zahl < 10000 ) { zahl = number[5]; // was ist hier falsch? ergebnis1 = (number [0] + number[1] + number[2] + number[3]) - (4*48); std::cout << "Die Quersumme lautet: " << ergebnis1 << std::endl; }
-
-
Fuchs aus dem Wald schrieb:
Baldry schrieb:
Hab das Problem nun so gelöst durch ein tipp vom arbeitskollegen
#include <iostream> char number[5]; //Array mit 5 Zeichen start bei 0 if (zahl > 999 && zahl < 10000 ) { zahl = number[5]; // was ist hier falsch? ergebnis1 = (number [0] + number[1] + number[2] + number[3]) - (4*48); std::cout << "Die Quersumme lautet: " << ergebnis1 << std::endl; }
Leider weiß ich nicht was da genau falsch ist, also die function geht so. wenn ich was unter 1000 eingebe kommt der richtige fehler sowie bei über 10000. und es wird auch die richtige quersumme ausgegeben bei einer 4 stelligen zahl. Danke für den tipp Kellerautomat was ich meinte war eine if- abfrage. Villeicht meinst du ja das obwohl ich nur 4 zahlen benutze 5 arrys genommen habe`?mir wurd dazu geraten immer 1 mehr zu nehmen.
-
Baldry schrieb:
#include <iostream> #include <string> #include <iomanip> int main() { int zahl; std::cout << "Willkommen in meiner \"Quersummenausrechnung\" \n" <<std::endl; std::cout << "Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!\n"<< std::endl; std::cout << "Bitte geben sie eine 4-stellige Zahl ein: "; std::cin >> zahl; std::cout << "Die eingegebene Zahl lautet " << zahl << "\n" << std::endl; int ergebnis1; char number[5]; //Warum ein array mit 5! Zeichen bei einer vierstelligen Zahl? if (zahl > 999 && zahl < 10000 ) { zahl = number[5]; //das array hat nur: number[0],[1],[2],[3],[4]! //dazu weist du deiner zahl etwas aus number[5] zu ich denke du wolltest das anders rum ergebnis1 = (number [0] + number[1] + number[2] + number[3]) - (4*48); std::cout << "Die Quersumme lautet: " << ergebnis1 << std::endl; } else if (zahl > 10000) { std::cout << "Ihre Zahl ist zu hoch"<<std::endl; std::cout << zahl; } else if (zahl < 1000) { std::cout << "Ihre Zahl ist zu klein" <<std::endl; std::cout << zahl; } else { std::cout << "Sie haben ungueltige Zeichen eingetragen."; std::cout << zahl; } }
Es wurde dir geraten aber nicht erklärt warum? Dann frag das mal nach.
Grund hat das aber du solltest auch lernen warum.
Dazu hast du was mit der Zuweisung nicht richtig. Und das benutzen des Arrays ist auch nicht so wie du es dir vorstellst.
Schau mal hier, wenn englisch für dich ok ist: http://www.cplusplus.com/doc/tutorial/arrays/Edit:
Dazu ist deine letzte else if unötig da du vorher schon Prüfst ob die Zahl in dem richtigem Bereich ist und ob sie zu groß ist. treffen die nicht ein ist sie zu Klein oder ungültig. Also aus dem letzen else if und else:else{ std::cout << "Ihre Zahl ist zu klein oder ungültig!" <<std::endl; std::cout << zahl; }
-
Ich denke es liegt daran das die Zahl
falsch übertragen wird in die ifschleife.Ich denke, es liegt daran, dass dein Programm völliger Unsinn ist.
Die Quersumme einer Zahl in Basis B lässt sich ganz einfach durch folgenden Algorithmus bestimmen.während z != 0: quersumme += z % B z /= B
Da muss man sich schon rein prinzipiell gar nicht auf eine bestimme Stellenzahl festlegen.
Das hier:zahl = number[5];
Ist absoluter Mist und sollte eigentlich gar nicht kompilieren. [...]
(Stimmt nicht, siehe unten)Und wieso
<iomanip>
einbinden?
-
Was ich genau in dem Code mache ist nicht wichtig es ging ja im grunde nur darum ARRYS und IF- abfragen zu erstellen ob das jetzt das ausrechnen einer quersumme ist oder was anderes spielt dabei keine rolle. und wie gesagt ich befasse mich erst seid kurzem damit daher hab auch noch nicht allzuviel erfahrung.
iomanip hab ich vergessen raus zulöschen das hatte ich zuvor bei was anderem benutz.C++:
zahl = number[5];Ist absoluter Mist und sollte eigentlich gar nicht kompilieren. Strings in Zahlen zu verwandeln ist bei weitem nicht so trivial dass man es in die Semantik grundlegender Datentypen einbaut. Das ist recht spezifisch (Formatierung, Basis, usw.).
Am einfachsten geht es, falls du das mal wirklich brauchst, mit den neu in C++11 eingeführten Funktionen std::stoi, std::stol, std::stoll.tut mir leid aber das versteh ich nun kaum, weil zahl ja kein string ist sondern int also zahlen.Tut mir leid falls ich was falsch verstehe liegt es halt daran das ich noch nicht so viel weiß
-
Baldry schrieb:
C++:
zahl = number[5];Ist absoluter Mist und sollte eigentlich gar nicht kompilieren. Strings in Zahlen zu verwandeln ist bei weitem nicht so trivial dass man es in die Semantik grundlegender Datentypen einbaut.
Was er da tut ist einen char "in eine Zahl umzuwandeln". Das ist durchaus so vorgesehen, macht aber nicht das was er vermutlich erreichen möchte.
-
Baldry schrieb:
Villeicht meinst du ja das obwohl ich nur 4 zahlen benutze 5 arrys genommen habe`?mir wurd dazu geraten immer 1 mehr zu nehmen.
Genau, du hast 5 Elemente in deinem Array.
Die Zählung fängt bei 0 an. Das hast du richtig.Bis wohin kommst du denn, wenn du 5 Elemente von 0 an abzählst?
Richtig, bis 4. Also gibt es das Array-Element mit dem Index 5 gar nicht.zahl = number[5];
ist also falsch, da du auf ein nicht existierende Element zugreifst.Und ungültige Zeichen kannst du so gar nicht erkennen, da zahl immer einen Wert hat.
-
*facepalm*
Ich habe das [5] voellig uebersehen... entschuldigt mich. Ich dachte, er wollte einer Zahl das ganze Array zuweisen. Haette wohl nicht am fruehen Morgen hier schreiben sollen.tut mir leid aber das versteh ich nun kaum, weil zahl ja kein string ist sondern int also zahlen.
Nein, ich hatte ein Missverstaendniss. Du versuchst die fuenfte Ziffer des Arrays in
zahl
zu speichern, hast aber dafuer den falschen Index benutzt (5 statt 4). Der naechste Fehler ist es, dass du den ASCII-Wert der Ziffer abspeicherst (also ihren Zeichencode), daher gehoert da noch ein- '0'
hin.Edit^x: ... Und natuerlich ist das Array auch nicht initialisiert (dessen Elemente haben einen zufaelligen Wert).
-
also hier
http://www.tutorials.de/c-c/377925-loesung-zu-aufgabe-von-highscore-de.html
#9 beitrag. Da steht das man genug arry plätze machen soll (mehr als nötig) also ist das nicht richtig?Wo setzt ich die 0 ein nochmal?
int main() { #include <iostream> char zahl[5]; std::cout << "Willkommen in meiner \"Quersummenausrechnung\" \n" <<std::endl; std::cout << "Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!\n"<< std::endl; std::cout << "Bitte geben sie eine 4-stellige Zahl ein: "; std::cin >> std::setw(5) >> zahl; std::cout << "Die eingegebene Zahl lautet " << zahl << "\n" << std::endl; int ergebnis1; ergebnis1 = (zahl [0] + zahl[1] + zahl[2] + zahl[3]) - (4*48); std:: cout << "Die Quersumme lautet: "<< ergebnis1 << std::endl; int zahl; std::cout << "Willkommen in meiner \"Quersummenausrechnung\" \n" <<std::endl; std::cout << "Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!\n"<< std::endl; std::cout << "Bitte geben sie eine 4-stellige Zahl ein: "; std::cin >> zahl; std::cout << "Die eingegebene Zahl lautet " << zahl << "\n" << std::endl; int ergebnis1; char number[5]; if (zahl > 999 && zahl < 10000 ) { zahl = number[5]; ergebnis1 = (number [0] + number[1] + number[2] + number[3]) - (4*48); std::cout << "Die Quersumme lautet: " << ergebnis1 << std::endl; } else if (zahl > 10000) { std::cout << "Ihre Zahl ist zu hoch"<<std::endl; std::cout << zahl; } else if (zahl < 1000) { std::cout << "Ihre Zahl ist zu klein" <<std::endl; std::cout << zahl; } else { std::cout << "Sie haben ungueltige Zeichen eingetragen."; std::cout << zahl; } }
Das geht ja soweit (das Programm fungzuniert!) Also wenn ich das richtig verstanden habe ist es einfach zuviel für so eine einfache function?
-
Baldry schrieb:
(das Programm fungzuniert!)
-
lolalter schrieb:
Baldry schrieb:
(das Programm fungzuniert!)
Baldry schrieb:
Hab das Problem nun so gelöst durch ein tipp vom arbeitskollegen
not sure if troll or just...
-
Baldry was macht:
Zahl = number[5]; //oder halt eher number[4]
und was willst du?
Vielleicht das die Zahl aus zahl in number gespeichert wird?1. Zuweisung allgemein
Die allgemeinste Form ist.Variablenname = Ausdruck; oder
variable_name = expression; in englishDas Gleichheitszeichen steht hier für eine Zuweisung, also z.B. x = x + 42; bedeutet: Compiler, addiere jetzt zu dem was in x drin steht 42 dazu und tue das Ergebnis wieder in x, es ist auf keinen Fall mit einer mathematischen Gleichung oder ähnlichem zu verwechseln.
Der Ausdruck kann ein Wert, eine andere Variable, oder mehrere Variablen und Werte verknüpft mit Operatoren sein.
-
#include <iostream> #include <string> #include "taschenrechner.h" int main() { int zahl; std::cout << "Willkommen in meiner \"Quersummenausrechnung\" \n" <<std::endl; std::cout << "Sie muessen eine 4-stellige Zahl eingeben damit es funktioniert!\n"<< std::endl; std::cout << "Bitte geben sie eine 4-stellige Zahl ein: "; std::cin >> zahl; std::cout << "Die eingegebene Zahl lautet " << zahl << "\n" << std::endl; int ergebnis1; char number[4]; if (zahl > 999 && zahl < 10000 ) { zahl = number[4]; ergebnis1 = (number [0] + number[1] + number[2] + number[3]) - (4*48); std::cout << "Die Quersumme lautet: " << ergebnis1 << std::endl; } else if (zahl > 10000) { std::cout << "Ihre Zahl ist zu hoch"<<std::endl; std::cout << zahl; } else if (zahl < 1000) { std::cout << "Ihre Zahl ist zu klein" <<std::endl; std::cout << zahl; } else { std::cout << "Sie haben ungueltige Zeichen eingetragen."; std::cout << zahl; }
So nochmal, ich hab zahl = number[4]; erstellt damit Zahl (int) zu einzelnen zahlen aufgeteilt wird (z.b 4300 =zahl 4 =number[3] 3 =number[2] 0 =number[1] 0 =number[0]) so das ich die quersumme daraus errechenen kann. als ich noch vorher Char hatte konnte ich diese nicht als ganze zahl im if ausgeben die wurden immer einzelnt ausgegeben.
-
Baldry schrieb:
So nochmal, ich hab zahl = number[5]; genommen[...]
Es gibt aber im Array
number
kein Element mit dem Index 5:char number[5]; +---+---+---+---+---+~~~ | 0 | 1 | 2 | 3 | 4 | +---+---+---+---+---+~~~ ^ | zahl = number[5];
Gottverdamminocheins!
-
Ja stimmt ich hab es grad eben umgeändert auf 4.
-
Baldry schrieb:
Ja stimmt ich hab es grad eben umgeändert auf 4.
Du hast aber auch die Größe von number auf vier Elemente geändert, dh. number[4] gibt es jetzt auch nicht mehr – das wäre ja das fünfte Element.
Baldry schrieb:
char number[4]; // ... zahl = number[4];
Abgesehen davon: Du befüllst number nirgends. Und selbst wenn du das machen würdest: number ist ein char-Array. Das kannst du zwar zu int konvertieren, aber das macht garantiert nicht das, was du möchtest.
-
nman schrieb:
Abgesehen davon: Du befüllst number nirgends. Und selbst wenn du das machen würdest: number ist ein char-Array. Das kannst du zwar zu int konvertieren, aber das macht garantiert nicht das, was du möchtest.
Probier doch mal das hier aus und sag mir, was dir auffällt:
#include <iostream> int main() { char number[4] = { '1', '2', '3' }; int one = number[0]; int two = number[1]; int three = number[2]; std::cout << one << " " << two << " " << three << std::endl; }