Hallo Sebastian,
On Thu, May 31, 2001 at 13:13:07 +0200, Sebastian Roth wrote:
Bewegung. Wenn man dann die erste gesuchte Variable (s) eingeben soll, wars das, ende. Mit einem ddd habe ich einen exit-code 16 festgestellt. Wenn ich
Aus eigenger Erfahrung kann ich sagen: scanf() is a pain in the ass. Ich habe mir irgendwann mal ne eigene Funktion zum Einlesen eines Strings geschrieben. Sicher auch nicht das Gelbe vom Ei, aber fehlertoleranter als scanf() allemal.
/* Textzeile einlesen Stoppt bei LF oder CR/LF Fehler bei mehr als n gelesenen Zeichen oder EOF */ getline(FILE *fdesc, unsigned char *buf, int n) { unsigned char ch = 0; int cnt = 0;
while ((ch != '\n') && (ch != '\r')) { ch = getc(fdesc); *(buf++) = ch; cnt++; if ((cnt > n) || (feof(fdesc))) { fprintf(stderr, "getline(): read error\n"); return 1; } } /* CR ueberspringen */ if (ch == '\r') ch = getc(fdesc); /* String terminieren */ *(--buf) = 0; return 0; }
Ein aufrufendes Codefragment dafuer koennte so aussehen:
char line[200];
...
if (getline(stdin, line, 199) != 0) { fprintf(stderr, "shit happens.\n"); exit(1); } else { /* irgendwas mit line anstellen */ ... }
Wenn Du damit Zahlen einliest, musst Du natuerlich noch atoi() oder aehnliche Hilfen bemuehen.
bye, Chris