Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Error handling

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.10.2003, 12:51 Uhr
~Kamei
Gast


Hallo zusammen!
Es geht um C. Ich möchte bei einer eingabe vom Benutzer den eingegebenen Wert auf integer prüfen. wenn zB. ein Buchstabe eingegeben wird soll der Benutzer eine kurze Fehlermeldung erhalten und dann wieder zur Eingabe geführt werden. Wie lässt sich das unter C realisieren?
Bin für jede Antwort dankbar
MfG Kamei
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.10.2003, 12:54 Uhr
virtual
Sexiest Bit alive
(Operator)


scanf gibt die Anzahl der korrekt gelesenen Felder zurück.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.10.2003, 13:07 Uhr
~Kamei
Gast


also mein code sieht so aus:
int a=0;
printf("Eingabe der gewünschten Zeilenn");
scanf("%d",&a);

Wenn man als Benutzer nun einen Buchstabe eingibt hängt sich das Programm mit einer except violation auf... Diesen Fehler möchte ich abfangen.
MfG Kamei
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.10.2003, 13:18 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würde es so lösen:

C++:
char buffer[256];
int zahl;
char dummy;
int tmp;

/*
* Eingabeprompt
*/

printf("Eingabe der gewünschten Zeilen: ");
fflush(stdout);

/*
* Erstmal als text einlesen
*/

fgets(buffer, sizeof(buffer), stdin); // Hier eigentlich noch ErrorCheck!
tmp = strlen(buffer);
if (tmp>0 && buffer[--tmp]='\n') buffer[tmp] = 0; // Newline entfernen

/*
* Eingabe analysieren
*/

tmp = sscanf(buffer, "%d%c", &zahl, &dummy);
if (tmp==0)
{
    fprintf(stderr, "Eingabe war insgesamt fehlerhaft\n");
}else if (tmp==2)
{
    fprintf(stderr, "Nach Zahl folgt mind. ein nicht numerisches Zeichen\n");
}


}
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.10.2003, 13:41 Uhr
~Kamei
Gast


if (tmp>0 && buffer[--tmp]='\n') buffer[tmp] = 0; // Newline entfernen

in dieser zeile vom code kommt bei mir die fehlermeldung:
error C2106: '=' : left operant must be l-value
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.10.2003, 13:52 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ja muss == heisen
ein einfaches = ist eine zuweisung. Ist ein immer wieder anscheinend auch von profies gern gemachter fehler. Die arbeiten halt auch mit anderen Programmiersprachen als mit c

C++:
if (tmp>0 && buffer[--tmp]=='\n') buffer[tmp] = 0;


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 22.10.2003 um 14:03 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.10.2003, 13:59 Uhr
~Kamei
Gast


Viele Dank Leute!
Geht
MfG Kamei
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: