kommazahl?



  • hallihallo ich hab gestern mal angefangen mit c zu programmieren und mal einen taschenrechner gemacht zum ausrechnen eines quaders(volumen).mein problem ist aber immer wenn ich eine kommazahl oder eine zu lange zahl eingebe stürzt das programm ab oder gibt müll aus?hier mal der quellcode.ich glaube ja das es irgendwas mit "int"zu tun hat vllt muss es was anderes sein oder so!

    #include <stdio.h>
    
    int main()
    {
    	int i=0;
    	int j=0;
    	int k=0;
    	int v=0;
    	int e=0;
    
    printf("                 Volumenberechner         version 0.7\n\n\n");
    
    	printf("Strecke a in cm:   ");
    	scanf("%d", &i);
    
    	printf("\n");
    
    	printf("Jetzt gib noch Strecke b in cm ein:  ");
    	scanf("%d", &j);
    
    	printf("\n");
    
    	printf("Und zu guter letzt Strecke c  in cm  :  ");
    	scanf("%d", &k);
    
    	v=i*j*k;
    
    		printf("\n");	
    
    		printf("Das Volumen Betraegt: 	%d cm3\n\n\n\n\n\n\n\n\n\n\n\n\t\t\n\n\t\t\t\t", v);  
    
    	scanf("%d", &e);
    
        return 0;
    
    }
    


  • Statt "int" nimm "double" und statt "%d" nimm "%f" od. "%g".

    "3,5" kannst Du dann aber nur schreiben, wenn Du vorher die locale auf Deutsch eingestellt hast (siehe setlocale()).

    Ansonsten "3.5" (also US Format).

    Der Datentyp "int" kann nur Ganzzahlen aufnehmen.
    Der Datentyp "double" kann alle reellen Zahlen aufnehmen.



  • und das nur in 10 minuten 😃 gj 🙂

    edit:okay jetzt stürzt das programm zwar nicht mehr ab aber das ergebniss ist immer 0.000000........hier nochmal der neue code:

    #include <stdio.h>
    
    int main()
    {
    	double  i=0;
    	double  j=0;
    	double  k=0;
    	double  v=0;
    	double  e=0;
    
    printf("                Volumenberechner         version 0.7\n\n\n");
    
    	printf("Strecke a in cm:   ");
    	scanf("%f", &i);
    
    	printf("\n");
    
    	printf("Jetzt gib noch Strecke b in cm ein:  ");
    	scanf("%f", &j);
    
    	printf("\n");
    
    	printf("Und zu guter letzt Strecke c  in cm  :  ");
    	scanf("%f", &k);
    
    	v=i*j*k;
    
    		printf("\n");	
    
    		printf("Das Volumen Betraegt: 	%f cm3\n\n\n\n\n\n\n\n\n\n\n\n\t\t\n\n\t\t\t\t", v);  
    
    	scanf("%d", &e);
    
        return 0;
    
    }
    


  • Sorry, mein Fehler. Du mußt bei scanf() "%lf" verwenden. Die Parameter sind bei scanf() und printf() unterschiedlich. 😉



  • vielen dank geht alles gut.
    frage:warum hat man dann überhaupt "int"erfunden xD wollen die verhindern das man dezimalzahlen nimmt ^^(das muss jetzt keiner beantworten!)



  • Ich antworte trotzdem: 😉

    Der Grund dafür, warum es den int-Typ gibt, ist, daß die Prozessoren hauptsächlich ganze Zahlen verwenden. In den modernen CPUs gibt's aber auch etliche Fließkomma-Befehle. Außerdem waren auf früheren CPUs ganze Zahlen viel schneller als Fließkommazahlen, und manche frühe CPU hatte gar keine Fließkommazahlen, dann mußten solche Typen wie "double" emuliert werden.

    Es gibt in C noch mehr Datentypen:

    - char: Ganzzahltyp, mindestens 8 Bit breit (-128..+127 bzw. 0..255)
    - short: Ganzzahltyp, mindestens 16 Bit breit (-32768..+32767, vorzeichenlos 0..65535)
    - int: Ganzzahltyp, mindestens 16 Bit breit (meist 32 Bit heutzutage)
    - long: Ganzzahltyp, mindestens 32 Bit breit (-231..+231-1, vorzeichenlos 0..2^32-1)
    - long long: neuer Ganzzahltyp meist 64 Bit oder mehr

    - float: Fließkommatyp (reelle Zahlen), mindestens 32 Bit breit
    - double: Fließkommatyp (reelle Zahlen), mindestens 64 Bit breit

    - Typ*: Zeigertyp, prozessorspezifisch (z.B. Ganzzahltyp, 32 Bit breit auf Pentium CPUs)
    D.h. Zeiger werden im Prozessor auch als Zahlen gespeichert.



  • falls du mit abstürzen meinst, daß sich das programm zum schluß bei eingabe von return nicht beendet, dann liegt das daran, daß scanf("%d",&e) auf die eingabe einer zahl wartet, dh auf die eingabe einer folge von ziffern-zeichen. das return wird von scanf() aber wie ein leerzeichen behandelt!

    besser, du schreibst stattdessen

    getchar()
    

Anmelden zum Antworten