strtod Frage...
-
Moin!
Ich bin neu in diesem Forum und bin ein C++ Neuling. Wir arbeiten an einem einfachen Schulprojekt zur Grundlagenerarbeitung.
Ich habe aber 2 Probleme bei meinem Code einer Konsolenanwendung:
1.:
Ich habe eine Funktion "eingabe(string text)" welche nur einen Textstring erhält der ausgegeben werden soll und als Rückgabewert eine double liefern soll.double eingabe(string text) { char value2; cout << "\n" << text; cin >> value2; const char* value = &value2; char* ep; double value1; value1 = strtod(value, &ep); while(ep != NULL && value1 <= 0) { cout << "\nUngueltige Eingabe: " << text; cin >> value2; value = &value2; value1 = strtod(value, &ep); } return value1; } //Aufgerufen über: double s = eingabe("Geben sie eine Zahl greosser 0 ein!"); double t = eingabe("Geben sie noch eine Zahl greosser 0 ein!"); double f = eingabe("Und noch eine Zahl greosser 0.");Gibt man nun eine Zahl mit mehreren Ziffern ein, überspringt er die jeweils darauf folgenden Funktionsaufrufe und trägt in die Variablen den Wert der jeweilige Ziffer ein. Man könnte natürlich direkt in double eingeben lassen, aber wenn mann sich vertippt oder absichtlich etwas falsches eingibt, fällt das Programm in eine Endlosschleife. Wie kann ich dafür sorgen, dass er die komplette Zahl mit einem Mal zurück gibt und nicht erst später?!
2. Problem: Ich möchte kontrollieren, ob eine Variable entweder 1 oder 2 ist, wenn ja, denn soll FALSE zurückgegeben werden. Habe verschiedenste Ansätze versucht, aber entweder war immer FALSE oder immer TRUE die Rückgabe, unabhängig von den Werten.
int kontrollea(double f) { char c; char d; if(f == 1) { c = 'a'; } else { c = 'b'; } if(f == 2) { d = 'a'; } else { d = 'b'; } if(c == d) { return FALSE; } else { return TRUE; } }Dies war mein umständlichster Ansatz, weil ich schon an meinem Denken zweifelte. Das Ganze soll von einer while schleife aufgerufen werden, wenn also die eingegebene Variable 1 oder 2 ist, soll FALSE zurückgegeben werden, wenn nicht TRUE und die Schleife soll nochmal ausgeführt und zur Neueingabe auffordern. leider funktioniert das so nicht...
-
double eingabe(string text) { /*char value2; // wie willst du in einem einzelnen Zeichen ne real zahl eingeben? */ char value2[10]; cout << "\n" << text; cin >> value2; /*const char* value = &value2; //quatsch char* ep; //quatsch double value1; //quatsch value1 = strtod(value2, &ep); //quatsch */ value1= atof(value2); while(!value1){ cout << "\nUngueltige Eingabe: " << text; cin >> value2; /*value = &value2;*/ value1= atof(value2); /* value1 = strtod(value, NULL);*/ } return value1; }
-
BorisDieKlinge schrieb:
... /*const char* value = &value2; //quatsch char* ep; //quatsch double value1; //quatsch value1 = strtod(value2, &ep); //quatsch */ value1= atof(value2); while(!value1){// kwatsch ! ...ist 0.0 etwa keine zahl ?

char* str = NULL; char* strnum = "0.0"; double number = 10.0; if( !( number = atof(strnum)) ) puts("I'm not a number -> kwatsch."); number = strtod( strnum, &str ); if( str != (strnum + strlen(strnum)) ) printf( "Ungueltiges zeichen %c in strnum -> kein kwatsch.\n", *str ); strnum = "0.0ahaaa!"; number = strtod( strnum, &str ); if( str != (strnum + strlen(strnum)) ) printf( "Ungueltiges zeichen %c in strnum -> kein kwatsch.\n", *str );