gets nimmt keine Nullen entgegen...
-
Ich habe ein Problem mit gets. Sowohl unter Windows kompiliert als auch mit der gcc unter Linux: die Funktion liest keine einzelne 0 ein. 0 + return und nichts passiert. Erst bei einer Eingabe != 0 reagiert die Funktion auf return und der Quelltext wird weiter abgearbeitet... hat jemand n Plan, woran das liegt?
Hier ein Quelltextausschnitt:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define LENGTH 100 #define MAX_DATEN 10 #define MAX_TEL 2 enum Telefontyp {Unbekannt, Privat, Mobil, Buero}; typedef struct TelefonNummer { char nr[LENGTH]; enum Telefontyp typ; } TelefonNummer; typedef struct Datensatz { char vorname[LENGTH]; char name[LENGTH]; TelefonNummer nummern[MAX_TEL]; } Datensatz; void lese_ein(Datensatz *ds){ enum Telefontyp typ; int i; char *eingabe = malloc(sizeof(char)); printf("Name: "); gets(ds->name); printf("Vorname: "); gets(ds->vorname); for (i = 0; i < MAX_TEL; i++){ typ = Unbekannt; printf("Telefon[%d]: ", i); gets(ds->nummern[i].nr); printf("Typ[%d] (Unbekannt: 0, Privat: 1, Mobil: 2, Buero: 3):\n", i); do { /* Hier ist der Knackpunkt. Es soll möglich sein, eine 0 einzugeben. Das ist leider ne Uni-Aufgabe, weshalb es mir nicht möglich ist, Alternativen zu ergreifen. Wir sollen eine 0 eingeben können und wir sollen auch gets benutzen... */ gets(eingabe); switch (*eingabe){ case '0': typ = Unbekannt; break; case '1': typ = Privat; break; case '2': typ = Mobil; break; case '3': typ = Buero; break; default: printf("Ungueltige Eingabe, bitte erneut eintippen.\n"); break; } } while (typ <= Unbekannt || typ > Buero); ds->nummern[i].typ = typ; } printf("--------------------------------------------\n"); }
-
laesst sich dein problem nicht auch reduzieren? so verlangst du, dass sich jeder durch den restlichen funktionierenden code kaempfen muss...
im uebrigen kann man deinen code nicht kompilieren. somit machst du es unmoeglich, effektiv nach fehlern zu suchen.benutz doch bitte fgets. die funktion ist sicherer (buffer overflows etc...)
beispiel:
#include <stdio.h> #define BIG 100 int main(void) { char input[BIG]; printf("Eingabe: "); fgets(input, BIG, stdin); printf("Eingabe: \"%s\"\n", input); printf("nochmal Eingabe: "); fgets(input, BIG, stdin); printf("zweite Eingabe: \"%s\"\n", input); return 0; }
im uebrigen funktioniert deine kommentierte stelle prima. wo ist das problem?
-
Nur eine kleine Anmerkung zu deinem Programm - ein einzelnes Zeichen mußt du nicht auf dem Heap reservieren, dazu wäre der Stack besser geeignet:
char eingabe; //... eingabe=getchar();//liest ein Zeichen von stdin
-
noch eine anmerkung: sizeof(char) ist immer genau 1 (eins). das ist in der sprachspezifikation fuer ansi c so festgeschrieben.
-
... das heisst dein reserviertes Array ist zu klein