Wie bei Überprüfung Buchstaben auschliessen?

pur3

Grünschnabel
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:

C++:
#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
 
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

C++:
if(scanf(...) != 1) dann fehlerausgabe

Warum nennst du das Mittel eigentlich sum? avg...
 
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?
 
Zuletzt bearbeitet:
Das kommt in den Code :rolleyes:

zB. statt
C++:
scanf("%f", &zahl2);
das:
C++:
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.
 
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)
 
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:

C++:
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/
 
Zuletzt bearbeitet:
Nochmal: Hab ich oben was Anderes geschrieben?

Und dein scanf ist übrigens falsch, & fehlt bei Parameter 2 und 3.
 
Danke für die Korrektur. Er hat es halt nicht verstanden. Ich wollte lediglich ein weiteres Beispiel zur Veranschaulichung geben.
 
Zurück