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 verhindert

    floating 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 verhindert

    Ich 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 😉


Anmelden zum Antworten