Cin.Getline nur Zahlen erlauben
-
manni66 schrieb:
Komisch, einige Beiträge vorher konntest du noch 5 Zeichen prüfen.
Ja das war ein Beispiel. Wenn ich nur wenige (hier in dem Fall 5 Zeichen geprüft habe), hat es bei Input 12 auch Output 12 ergeben.
Dafür hat es dann die Buchstaben nach der 5 Stellen nicht mehr erkannt.
-
Jajobe schrieb:
manni66 schrieb:
Komisch, einige Beiträge vorher konntest du noch 5 Zeichen prüfen.
Ja das war ein Beispiel. Wenn ich nur wenige (hier in dem Fall 5 Zeichen geprüft habe), hat es bei Input 12 auch Output 12 ergeben.
Dafür hat es dann die Buchstaben nach der 5 Stellen nicht mehr erkannt.Jajobe schrieb:
So habe es jetzt wie wob beschrieben gemacht. Bekomme es aber nur für das erste Zeichen hin, nicht für die ganze Eingabe. Wo liegt der Fehler? Bzw habt ihr nen Stichwort wonach ich suchen könnte
?
-
Achso. Ja. Ich weiß dass es daran liegt, dass ich nur auf das "erste Arrayglied" zugreifen kann. Sprich wenn ich *kette greift es nur auf kette[0] zu. Vorher habe ich alle 11 Glieder manuell eingegeben. Aber das muss ja auch irgendwie schöner lösbar sein, dass ich auf die ganze kette zugreifen kann.
-
Schleife
-
Schleife ist scheinbar nicht gewollt
Jajobe-Neu schrieb:
Ich weiß auch dass es nicht die schönste Lösung ist, aber ich möchte erst mal meinen Fehler bei dieser verstehen um im nächsten Schritt döse effizienter zu machen.
-
Mache es jetzt doch mit Schleife. Professor hat mir dazu geraten.
while (g<=11){ g++; if (kette[g] >= '-' && kette[g] <= '9'){ for (int i = isstart; i < len; i++) { wert = wert*10 + (kette[i]-'0'); } wert= wert*vorzeichen; cout<< wert; return 0; } else { cout << "Bitte geben Sie nur Zahlen ein"<<endl; cin.get(); } } }
Aber es funktioniert noch immer irgendwie nicht. Wird irgendwie noch immer nur die erste Stelle geprüft.
-
Boy, rück erst mal den Code gscheit' ein..
Weißt du was ASCII ist? Alles zw. - und 0 wäre auch . / aber kein +.
Und überleg noch mal, wie der Ablauf des Programms sein soll. So wahrscheinlich nicht.
-
Ja. Sorry. Versuche das irgendwie gerade durchzuboxen.
Ja ich weiß schon was Asci Werte sind. Aber + ist grundsätzlich egal. Deswegen habe ich das - min einbezogen. Es ist eher unwahrscheinlich dass der Benutzer .oder / eingibt (so Bedingung von meinem Prof).
-
Und "3--3-2-1" ist eine gültige Zahl?
Programmieren ist immer auch über Genauigkeit, sowas wie "wird wahrscheinlich nicht passieren" ist der Anfang vom Ende und Ursache vieler Sicherheitslücken. Was hindert dich zu testen, ob ein Wert zwischen (jeweils inkl.) '0' und '9' liegt ODER '-' ist? Dann ist es gleich richtig.
Und dann überleg mal weiter: das Minus-Zeichen darf nur am Anfang stehen. Alles andere müssen Ziffern sein (sofern wir jetzt keine 1000er-Trennzeichen haben). Also musst du ggf. das erste Zeichen anders als den Rest behandeln.
Das ist keine Aufgabe, an der man sich wochenlang aufhalten sollte, auch als Anfänger nicht.
-
#include "stdafx.h" #include <iostream> using namespace std; int i, a, d, g = 0, m; int vorzeichen, isstart; int main() { long long int wert = 0, len, wertneu; char kette[81]; cout << "Bitte geben Sie eine Zahl ein " << endl; cin.getline(kette, 81); //ließt Kette ein len = strlen(kette); //misst Läneg der Kette isstart = 0; vorzeichen = 1; //bei Vorezichen startet bei 1 if (kette[0] == '+') // bei + start bei 1 isstart = 1; if (kette[0] == '-') { //bei - start bei 1 isstart = 1; vorzeichen = -1; } if (strlen(kette) > 11) { //Länge der Kette wird eingelesen cout << "Bitte geben Sie eine kleinere Zahl ein" << endl; cin.get(); return 0; } g = isstart - 1; //g wird bei -1 definiert while (g < len - 1) { //zähhlen bis ende länge der kette minus der letzten Zahl g++; if (kette[g] >= '0' && kette[g] <= '9') { //Prüfen ob Kette Zahlen enthält wert = wert * 10 + (kette[g] - '0'); // Umwandlung in int Wert } else { cout << "Bitte geben Sie nur Zahlen ein" << endl; cin.get(); return 0; } } if (wert >= 2147483647) { cout << "Zahl zu gross" << endl; cin.get(); } wertneu = wert*vorzeichen; //Hinzufügen von Vorzeichen cout << wertneu; cin.get(); return 0; }
So habe nun alles rausgefunden mit Hilfe meines Profs. Waren teils sehr primitive Fehler.
Und sorry für die Formatierung. Habe das Programm auf Visual Studio geschrieben und Quelltext mir auf meinen Mac per Mail geschickt. Daher hat es die Formatierung durcheinander geworfen.
-
Sag deinem Prof, dass die von der deutschen C++-Community ihn scheiße finden.
-
rewrew schrieb:
Sag deinem Prof, dass die von der deutschen C++-Community ihn scheiße finden.
Warum?
-
Jajobe-Neu schrieb:
Warum?
don't feed ...