[C] Er macht kein gets < Sonstige < Schule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:46 Di 10.02.2009 | Autor: | froehli |
Aufgabe | Hex bzw Dezimal Arrays sollen in Intiger werte umgewandelt werden. |
Den Schwirigen Teil habe ich bisjetzt gelöst nur haperts am einlesen des strings.
Im Debugger kann man deutlich sehen das er den gets() befehl eindreutig überspringt.
Inzwischen sehe ich auch den Wald vor lauter bäumen nichtmehr.
Sieht jemand den fehler?
1: | #define L_EINGABE 32
| 2: | #include <stdio.h>
| 3: | #include <ctype.h>
| 4: | #include "toi.h"
| 5: |
| 6: | main()
| 7: | {
| 8: | char eingabe [L_EINGABE];
| 9: | int zahlint;
| 10: | int chose;
| 11: |
| 12: |
| 13: |
| 14: |
| 15: | while(1)
| 16: | {
| 17: | printf("Wollen sie eine Hex [1] oder eine Dezimalzahl [2] einlesen? ");
| 18: | scanf("%d", &chose);
| 19: |
| 20: | if(chose != 1 && chose != 2)
| 21: | {
| 22: | printf("\nFalsche eingabe\n");
| 23: | }
| 24: | else
| 25: | {
| 26: | printf("\nGeben sie das array ein\n");
| 27: | gets(eingabe);
| 28: | if(chose == 1)
| 29: | {
| 30: | zahlint = myX2I(eingabe); // Funktion fuer Hexarray -> Int wird aufgerufen
| 31: | }
| 32: | if(chose == 2)
| 33: | {
| 34: | zahlint = myA2I(eingabe); // Funktion fuer Dezarray -> Int wird aufgerufen
| 35: | }
| 36: | }
| 37: | printf("\nDas eingegebene Array %s entspricht dem Intiger Wert %d\n", &eingabe[0], zahlint);
| 38: | }
| 39: |
| 40: | system("pause");
| 41: | } |
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:48 Di 10.02.2009 | Autor: | froehli |
Tut mir leid wenn es sich schwer liest, aber in meinem C-Programm sind die einrücktiefen besser zu erkennen.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 02:21 Mi 11.02.2009 | Autor: | rainerS |
Hallo!
Nachdem du die Zahl 1 oder 2 eingibst, drückst du doch auf Return. scanf liest nur die Zahl aus dem Eingabestrom, überspringt aber nicht dden Rest der Zeile oder das Zeilenende. Wenn du dann gets() aufrufst, wird als erstes das Zeilenende gelesen und daher ein leerer String zurückgegeben. Lies die erste Zeile mit fgets ein und konvertiere mit sscanf in eine Zahl!
Oder du sorgst dafür, dass die Zeichen im Eigabepuffer überlesen werden, indem du
while (getchar() != '\n') { /* rest der zeile ueberlesen */ }
vor dem Aufruf von gets() einfügst.
Viele Grüße
Rainer
|
|
|
|