Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

22.12.2003, 13:26

2 Fragen zur "Fehlerbehandlung"

Ok ich weiß die Fragen sind wohl etwas blöd, aber trotzdem... (bezieht sich nur auf Konsole)

1.) Ich will eine Zahl einlesen, z.B. so

Quellcode

1
2
 int i;
          cin >> i;

Wie kann ich es verhindern bzw erkennen, dass der User nun ein Buchstabe oder gar mehrer Buchstaben eingibt ?

2.) Ich habe einen Array und will mithilfe von getline, einen String einlesen

Quellcode

1
2
 char buffer[64];
          cin.getline(buffer,64);

Ich kann aber durchaus mehr als 64 Zeichen eingeben, und wenn dem so ist, dann stürzt das Programm ab. Wie kann ich verhindern, dass der User mehr als 64 Zeichen eingibt ?

Danke im vorraus.

In Deinem Beitrag befinden sich noch Fehler.
Bitte bearbeite die rot markierten Stellen und lösche diesen Text.

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

2

22.12.2003, 22:03

Also, beim ersten Beispiel kannst du es nicht direkt verhindern, da ein Buchstabe auch als Zahl interpretiert wird! Du kannst höchstens die Zahl danach auf ihren Wert kontrollieren.

Und bei cin.getline() muss doch (soviel ich weiß) als zweites Argument das Trennzeichen übergeben werden und nicht die Anzahl der Bytes.
Eine Möglichkeit bestände darin, einen ersten Puffer anzulegen mit ausreichendem Speicher, ihn dann auf die Länge kontrollieren und ihn schließlich in den kleinen Puffer kopieren.

Es gibt auch eine Möglichkeit mit einem Input-Iterators. Das ist aber ein wenig kopmlizierter...

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

3

22.12.2003, 22:51

HA! ;)
Ich glaube, ich hab' noch was gefunden! (Zu deinem zweiten Beispiel!)

Es gibt die Funktion 'gets', der du den Puffer übergeben kannst. Sie fordert den Benutzer dann auf, einen String einlesen zu lassen. Also wie 'cin'. Jedoch kann auch sie gegen Bereichsüberschreitung nichts tun. DOCH ES GIBT NOCH EINE FUNKTION, nämliche 'fgets', sie ist das gleiche, nur noch ein wenig allgemeiner! Sie liest den Input aus einem FILE-Stream (FILE *), in deinem Fall einfach 'stdin'. Der Vorteil ist aber, dass du eingeben kannst, wie viel gelesen werden soll (mit der terminierenden NULL!). In deinem Beislpiel also:

Quellcode

1
2
3
4
...
char buffer[64];
fgets(buffer,64,stdin);
...


und egal, was der Benutzer eingegeben hat, es werden nur die ersten 63 Zeichen (das 64. ist die 0) übernommen, der Rest wird abgeschnitten, und zwar OHNE dass das Programm abstürzt! :-D

Probiers mal aus!

Ich hoffe, ich konnte dir helfen...
mfg,
Till

Werbeanzeige