Probleme mit Kommazahlen - Runtime Error
-
die eingabe ist unsicher!
-
rumprobieren schrieb:
Versuch mal dein Array vorläufig zu initialisieren. Etwa so:
oder so deklarieren:
double a[20] ={0.0};
-
blödsinn
-
sdfsh schrieb:
blödsinn
was ist blödsinn.
-
Hallo,
Danke für die Tips. Es funktioniert jetzt mit beiden Initialisierungen, also einmal mit
double a[20] = {0.0};
und mit
for(int i = 0; i < anzahl; i++) { a[i] = 0.0;
Mein Programm sieht nun so aus:
/* main.c */ #include <stdio.h> #include <stdlib.h> void doubleArrayEingabe(double a[], int anzahl); void doubleArrayAusgabe(double a[], int anzahl); int main(void) { double a[20] = {0.0}; int anzahl = 0; printf("Wie viele Werte moechten Sie eingeben (1 - 20)\n"); scanf("%i", &anzahl); if(anzahl > 0 && anzahl <= 20) { doubleArrayEingabe(a, anzahl); doubleArrayAusgabe(a, anzahl); } else { return EXIT_FAILURE; } return EXIT_SUCCESS; } void doubleArrayEingabe(double a[], int anzahl) { printf("Geben Sie nun der Reihe nach die Werte ein.\n"); for(int i = 0; i < anzahl; i++) { //a[i] = 0.0; printf("a[%i]: ", i); scanf("%lf", &a[i]); } } void doubleArrayAusgabe(double a[], int anzahl) { printf("\n"); printf("Hier Ihre eingegebenen Werte:\n"); for(int j = 0; j < anzahl; j++) { printf("a[%i] => %lf\n", j, a[j] ); } }
Ich würde nun aber gerne wissen, woher nun der Laufzeitfehler kam bzw. durch was er entstanden ist?
Liegt es daran, dass das Array mit Zufallswerten initialisiert wird?
P.S.: Danke mcr für den Fehler, hatte die Funktion umbenennen wollen und die Deklaration dabei vergessen.
0xyD
-
sicherheitsfan schrieb:
die eingabe ist unsicher!
Was soll an der Eingabe denn unsicher sein? Er hat die Eingabelänge doch ganz klar begrenzt.
-
was hast du den für einen kompiler ?
wenn du eine gui hast dann suchmal ein menü wo du das wegoptimieren der überschüssigen funktionen verhindertfloating point not loaded -> keine verlinkung
-
rumprobieren schrieb:
sicherheitsfan schrieb:
die eingabe ist unsicher!
Was soll an der Eingabe denn unsicher sein? Er hat die Eingabelänge doch ganz klar begrenzt.
buchstabeneingabe macht probs
-
sicherheitsfan schrieb:
buchstabeneingabe macht probs
Das hast du schonmal gesagt.
-
Bzw. welche Buchstaben zum Teufel?
-
rumprobieren schrieb:
sicherheitsfan schrieb:
buchstabeneingabe macht probs
Das hast du schonmal gesagt.
wann
rumprobieren schrieb:
Bzw. welche Buchstaben zum Teufel?
A, a, B, b, ... Z, z.
Und alle anderen Zeichen, die keine Zahl darstellen.
-
was hast du den für einen kompiler ?
wenn du eine gui hast dann suchmal ein menü wo du das wegoptimieren der überschüssigen funktionen verhindertIch arbeite mit MS Visual Studio 2005 und dem zugehörigen Compiler.
Ich mach mich da mal auf die Suche, viell. find ich den Punkt ja.
Danke dafür.
0xyD
-
Hätte da noch eine Frage:
Wie genau kann ich denn meine Eingabe auf unpassende Zeichen kontrollieren?
Momentan beende ich mein Programm ja knallhart mit einem EXIT_FAILURE in dem Teil hier:
scanf("%i", &anzahl); //<===== if(anzahl > 0 && anzahl <= 20) { doubleArrayEingabe(a, anzahl); doubleArrayAusgabe(a, anzahl); } else { printf("Fehlerhafte Eingabe.\n"); return EXIT_FAILURE;
Was ja auch noch Ok ist, ich könnte ja evtl. ne Schleife drum packen die jede Eingabe prüft und sich so lange wiederholt, bis alle Eingaben korrekt drin sind.
Nun möchte ich an dieser Stelle hier:
for(int i = 0; i < anzahl; i++) { //a[i] = 0.0; printf("a[%i]: ", i); scanf("%lf", &a[i]); //<==== }
direkt nach der Eingabe prüfen, ob die erforderlichen Eingaben richtig gemacht wurden, aber eben ob es sich um Eingaben im "double" Format handelt und keine alphabetischen Zeichen oder Sonderzeichen.
Dazu müsste es doch eine fertige Funktion geben, oder? Ich suche schon die ganze Zeit aber ich glaube, ich sehe den den Wald vor lauter Bäumen nicht mehr...
Gruss
0xyD
-
ja, oder so schrieb:
oder so deklarieren:
double a[20] ={0.0};double a[20] = {};
Reicht übrigens vollkommen aus.
-
0xyD schrieb:
for(int i = 0; i < anzahl; i++) { //a[i] = 0.0; printf("a[%i]: ", i); scanf("%lf", &a[i]); //<==== }
..
Gruss
0xyD
int NoError = 0; int i=0; ... for(i=0; i<anzahl; i++){ printf("a[%i]: ",i); NoError = scanf("%lf", &a[i]); if(NoError == 0){ printf("falsche Eingabe"); while(getchar()!= '\n'); i = i - 1; continue; } }
habs nicht probiert muss aber gehen bzw. so in der richtung