[c]double zahl?

Hi

da ist ein Fehler drinnen unzwar bekomme ich egal was ich eingebe eine zahl die höher ist als 4000000.
stimmt da was mit den typen net?
mfg mike4004
 
moin


Ups, ist mir garnicht aufgefallen eben... muss nochmal gucken was das soll.

Edit:
Probleme macht nur die Ausgabe, in der Variable "zahl" ist der richtige Wert!


mfg
umbrasaxum
 
Hi

Achaj was soll eigentlich das eingabe[index] = 0; wenn du vorher dem eingabe[index] = temp zuweist löscht du es dann nicht?

mfg mike4004
 
moin


Nö, ich erhöhe index bevor ist die Null speicher!
Die Null gibt an wo der String aufhört.
Vielleicht wäre ein gutes Buch mit Grundlagen erstmal das richtige für dich.


mfg
umbrasaxum
 
Hi

du meinst \0 oder so hab ich das nämlich in meinem Buch gelesen.
Und was meinst du mit probleme macht die Ausgabe?

Wenn in der Variable zahl das richtige drinnen stehen würde dann würde es doch mit
printf("\n%lf", zahl); richtig ausgegeben werden oder?

Denn wenn ich mit zahl rechne passt a net ganz.

mfg mike4004
 
Zuletzt bearbeitet:
moin


du meinst \0 oder so hab ich das nämlich in meinem Buch gelesen.
In dem Fall ist es egal ob char temp = 0; oder char temp = '\0';

Und was meinst du mit probleme macht die Ausgabe?
Wenn ich das Programm mitm Debugger an geeigneter Stelle anhalte sehe ich das in der Variable der richtige Wert ist.

Bei mir klappt jetzt auch alles:
Code:
#include <stdio.h>
#include <conio.h>

int main()
{
	double zahl = 0;

	char eingabe[20];
	char temp;
	int index = 0;
	
	while((temp = getch()) != 13)
	{
		if(temp == ',')
			temp = '.';

		printf("%c", temp);

		eingabe[index++] = temp;
		eingabe[index] = 0;
	}

	zahl = atof(eingabe);

	printf("\n%f", zahl);
	printf("\n%f + 1 = %f", zahl, zahl+1);

	return 0;
}
Vielleicht wäre %.3f angebracht, aber das tut ja erstmal nichts zur Sache.


mfg
umbrasaxum
 
Hallo,

schau mal hier:
Code:
#include <stdio.h>
#include <stdlib.h>

int isDouble(char* toTest){
    while(*toTest){
        if((*toTest < '0' || *toTest > '9') && *toTest != '.') return 0;
        toTest++;
    }
    return 1;
}

int main()
{
    char input[20];
    scanf("%s", input);
    if(isDouble(input)) printf("%lf\n", atof(input));
    else printf("Error: Input was not valid\n");
}

Gruß

RedWing
 
Hi

danke für eure Hilfe habs jetzt so gemacht

frage wieso machst du bei double %f denn in meinem buch steht %lf oder lg ?

Code:
#include <stdio.h>
#include <conio.h>

int main()
{
	double zahl = 0;

	char eingabe[20];
	char temp;
	int index = 0;
	
	while((temp = getch()) != 13)
	{
		if(temp == ',')
			temp = '.';

		printf("%c", temp);

		eingabe[index++] = temp;
		eingabe[index] = "\0";
	}

	sscanf(eingabe,"%lf",&zahl);


	printf("\n%lf",zahl);
getch();
	return 0;
}

mfg mike4004
 
moin

wieso machst du bei double %f denn in meinem buch steht %lf oder lg
Einfach nur so ;)
Es ging dabei nur ums testen und dabei isses egal.
Welchen Unterschied es macht weiss ich jetzt nicht genau, is mir auch egal, da es wie gesagt nur zum testen war :)


mfg
umbrasaxum
 
Hi

noch mal schnell ne Frage wenn ich die Funktion nicht als main nutze (siehe code)

dann bekomme ich wenn ich die Variable cool global definiere 0 heraus und wenn ich sie in main definiere(wie im code) bekomme ich eine enorme minus Zahl heraus.

Wie mach ich das richtig?

mfg mike4004



Code:
#include <stdio.h>
#include <conio.h>

int eingabe_double(double);


int main(void){
	double cool;
	
	printf("Bitte zahl eingeben: ");
	eingabe_double(cool);
	printf("\n Die Zahl war : %lf",cool);
	getch();
}


int eingabe_double(double zahl)
{
	

	char eingabe[20];
	char temp;
	int index = 0;
	
	while((temp = getch()) != 13)
	{
		if(temp == ',')
			temp = '.';
		
		
		printf("%c", temp);

		eingabe[index++] = temp;
		eingabe[index] = "\0";
	}

	sscanf(eingabe,"%lf",&zahl);


	//printf("\n%lf",zahl);

	return 0;
}
 

Neue Beiträge

Zurück