# Wie bei Überprüfung Buchstaben auschliessen?



## pur3 (11. November 2012)

Hi an alle,

ihr habt mir heute schon einmal geholfen ein Problem zu lösen und hoffe diesesmal wieder

Ich will ein Programm in C programmieren, dass das arithmetische Mittel von 5 Zahlen errechnet. Dabei will ich sichergehen das  bei der Eingabe der ersten Zahl keine negative Zahl eigegeben werden darf, bei allen anderen, also Zahl 2-5 ist es egal!
Desweiteren soll bei jeder Zahleneingabe 1-5 überprüft werden das es sich dabei um keinen Buchstaben handelt. Anderfalls kommt eine Fehlermeldung! Und genau das ist das Problem. Ich weiss nicht wie ich die Überprüfung mache das ich alles eingeben darf aber keine Buchstaben! Könnt ihr mir da vll helfen?
Hier ist mein aktueller code:


```
#include <stdio.h>
#include <stdlib.h>

int main()
{

    float zahl1, zahl2, zahl3, zahl4, zahl5;
    float sum;

    printf("Bitte geben sie 5 Zahlen ein:   \n");
    scanf("%f", &zahl1);
if (zahl1<0 || zahl1........... ) 
{
    printf("Fehler, bitte eine positive Zahl eingeben!");
    return 1;
}
    scanf("%f", &zahl2);
    scanf("%f", &zahl3);
    scanf("%f", &zahl4);
    scanf("%f", &zahl5);

    sum = ((zahl1 + zahl2 + zahl3 + zahl4 + zahl5)/5);
    printf("Das arithmetische Mittel ist:  %.2f\n", sum);
    return 0;
}
```

es würde mir eig nur um die Überprüfung gehen, bzw wie ich die schreiben muss in meiner if-Anweisung, das keine Buchstaben eingegeben werden dürfen. (Bei den andern zahleneingaben bin ich noch nicht zur überprüfung gekommen da ich ja das Eine Problem habe^^)
Ich danke euch schon im voraus!


mfg


alex


----------



## sheel (11. November 2012)

Hi

Das mit den Buchstaben prüft scanf schon.
scanf hat auch einen Returnwert, und zwar die ANzahl der erfolgreich eingelesenen Variablen.
Bei dir liest jedes scanf nur ein einzelnes %f ein, also:
Returnwert 1=Alles in Ordnung; 0=Fehler


```
if(scanf(...) != 1) dann fehlerausgabe
```

Warum nennst du das Mittel eigentlich sum? avg...


----------



## pur3 (11. November 2012)

danke dir! was muss ich dann bei :

if(scanf(   ) !=1 eingeben? sry ich steh grade voll auf dem schlauch

eine abfrage oder wie?

if (zahl1 == scanf("%c") ) stimmt nicht oder?


----------



## sheel (11. November 2012)

Das kommt in den Code 

zB. statt

```
scanf("%f", &zahl2);
```
das:

```
if(1 != scanf("%f", &zahl2))
    printf("Keine korrekte Zahl eingegeben.");
    //und ggf. noch irgendwas machen
```
Oder eine Schleife (do-while) machen, dass bei Fehleingaben
die gleiche Zahl wieder eingegeben werden muss.


----------



## pur3 (11. November 2012)

hey danke sheel  es funkioniert

kannst du mir vll das erklären, was der ausdruck bedeutet/macht?

also der hier:   if (1 !=scanf("%f", &zahl1)


----------



## sheel (11. November 2012)

Da fehlt schon wieder die Klammer am Schluss.
Und hab ich nicht oben schon geschrieben, was das macht?


----------



## saftmeister (11. November 2012)

Naja, vielleicht solltest du mal die manpage oder das Manual zur Funktion scanf() lesen. Dann wüsstest du nämlich, das scanf() eine Ganzzahl zurück gibt, welche die Anzahl der korrekt eingelesenen Werte entspricht. Das bedeutet, du hast im Format-String ein oder mehrere Format-Tags und nach dem Format-String die Liste der Variablen, in welche der eingelesene Wert abgelegt werden soll. Wenn scanf() einen Wert nicht einlesen oder ablegen kann, wird von der Anzahl der zu lesenden Werte 1 abgezogen. Beispiel:


```
int zahl1, zahl2;
int gelesen = scanf("Gib zwei zahlen ein : %d %d", &zahl1, &zahl2);

if(gelesen != 2)
{
  printf("Es konnten nicht alle Werte gelesen oder in Variablen abgelegt werden!\n");
}
```

Hier kannst du zu scanf() nachlesen: http://www.cplusplus.com/reference/clibrary/cstdio/scanf/


----------



## sheel (11. November 2012)

Nochmal: Hab ich oben was Anderes geschrieben?

Und dein scanf ist übrigens falsch, & fehlt bei Parameter 2 und 3.


----------



## saftmeister (11. November 2012)

Danke für die Korrektur. Er hat es halt nicht verstanden. Ich wollte lediglich ein weiteres Beispiel zur Veranschaulichung geben.


----------

