# Komma statt Punkt in C



## Vektor (5. März 2004)

Hallo Zusammen!

Ich möchte den Benutzer für ein Konsolenprogramm in C gerne Kommazahlen (float) eingeben lassen. Nun ist es aber bei vielen so, dass sie intuitiv Komma und nicht Punkt schreiben. Also hätte ich gerne dass, wenn der Benutzer eine Zahl eingibt, auch das Komma (oder nur das Komma) anerkannt wird.

Ich dachte das könnte ich mit dem Befehl

#define

machen.

Da bringt er mir aber eine Fehlermeldung.

Oder muss ich da den Asci-Code eingeben also:

#define 'ASCI-Code von Punkt'     'ASCI-Code von Komma'

Oder geht es ganz anderst.

Danke im vorraus.


----------



## Bennily (5. März 2004)

Man bräuchte sowas wie str_replace in PHP (Gibts aber in C/C++ glaube ich nicht)

ABer das was du machst kann aufjedenfall nicht funktionieren.
Das wüsstest du wenn du den Precompiler verstanden hättest.


----------



## Tobias Grimm (5. März 2004)

Hallo,
IMHO würde das so gehen:

```
char tmp[] = "1.2345";
for (int i=0; i<strlen(tmp); i++)
  if (tmp[i] == ',') tmp[i] = '.';
float zahl = atof(tmp);
printf("%g\n",zahl);
```

mit anderen Worten: die Eingabe als char[] einlesen, Komma durch Punkt ersetzen und in float umwandeln. Ich hoffe du hast dir das so gedacht.
Übrigens:
Wenn da irgendwas kein reiner C-Code sein sollte dann bitte verbessern, ich mache normal nur C++... 

mfg


----------



## Thomas Kuse (6. März 2004)

In der for-Schleife darfst Du keine Variablen-Deklaration schreiben, die muss vorher geschehen.
Ansonsten sieht das nach reinem C aus


----------



## Vektor (8. März 2004)

Danke für eure Antworten. Ich komme nur noch nicht so ganz klar. Ich hab den code jetzt so erweitert:

```
int main()
{
  int i;
  float zahl;
  char tmp[] = "zahl"; 

  scanf ("%f",&zahl);                 /*Eingabe vom Benutzer*/
  for (i=0; i<strlen(tmp); i++)
  if (tmp[i] == ',') tmp[i] = '.';
  zahl = atof(tmp);
  printf("%f\n",zahl);
  getch();
}
```

Aber hier bekomme ich nicht die Zahl sondern 0.0000. Und das egal ob ich eine Zahl mit Komma oder Punkt eingebe. 

Ist es eigentlich auch möglich, das nur einmal in einem Code zu machen, oder muss ich das in jeder einzelnen Funktion erneut einfügen?


----------



## Thomas Pinske (8. März 2004)

Hallo Vektor,

die Benutzereingabe darf nicht in die float Variable sondern in das char Array geschehen:


```
int main() {
  int i;
  float zahl;
  char tmp[10];

  scanf ("%s", char);                                  /*Eingabe vom Benutzer*/
  for (i=0; i<strlen(tmp); i++)
    if (tmp[i] == ',')
      tmp[i] = '.';
  zahl = atof(tmp);

  printf("%f\n",zahl);
  getch();
}
```

Das char Array kann maximal eine Zahl mit 9 Zeichen (inkl. Dezimalpunkt) aufnehmen. Um größere Zahlen zu Speichern, muss die Feldanzahl entsprechend erhöht werden.

Grüße Thomas


----------



## Vektor (8. März 2004)

Ahh..so geht das. Ja jetzt klappt es. Hab nur noch das

scanf ("%s", char);

in 

scanf ("%s", &tmp);

umwandeln müssen.

Vielen Dank.


----------



## Thomas Pinske (8. März 2004)

Hallo Vektor,

sorry für den Fehler, aber hast es ja auch so hinbekommen.

Grüße Thomas


----------

