Eingabe wird ignoriert
-
äääähm.
what?!scanf("%i", &auswahl); test[0] = '\0'; fgets(test, sizeof(test), stdin); printf ("\nIst hier ein Zeilenumbruch?%sDenkbar...\n", test);
setzt einfach das erste Element der fgets-Zielvariable auf 0, damit man sich später nicht rausreden kann, ein newline wäre schon vorher dringestanden (man hat ja keine Eingabe machen können)
Das war alles, was ich loswerden wollte.
Ob scanf jetzt standardkonform ein %i kennt oder nur %d ist mir ehrlich gesagt gleich
Das wurde ja auch vom TE nicht als Problem kommuniziert.
Ich behaupte, das schlummernde newline ist der Schuldige und die oberen paar Zeilen da könnten das demonstrieren. Zum Beheben des Problems gibts mehrere Ansätze. Zu vermeiden ist davon am dringendsten einfflush(stdin);
(weil Bockmist)
-
fabi1991 schrieb:
dass sämtliche eingaben auf stdin komplett ignoriert werden.(scanf auswahl), zum test hab ich noch ein fgets dahinter gebastelt, wird ebenfalls ignoriert.
Berndi schrieb:
Ob scanf jetzt standardkonform ein %i kennt oder nur %d ist mir ehrlich gesagt gleich
Das wurde ja auch vom TE nicht als Problem kommuniziert.scanf verursacht ein Problem... oder geht heir was an mir vorbei?
Zu vermeiden ist davon am dringendsten ein
fflush(stdin);
(weil Bockmist)
-
Berndi schrieb:
setzt einfach das erste Element der fgets-Zielvariable auf 0, damit man sich später nicht rausreden kann, ein newline wäre schon vorher dringestanden (man hat ja keine Eingabe machen können)
Schwachfug.
-
DaRe schrieb:
scanf verursacht ein Problem... oder geht heir was an mir vorbei?
Scanf verursacht nie ein Problem, das Problem sitzt immer vor dem Bildschirm.
-
Stichwort vorbei. Wann ist dieser Tag endlich vorbei? :xmas2:
Aber zum Thema scanf...
Wenn es um Ganzzahlen ("Ziffernfolgen") geht, ist man mit %d als Formatkennzeichen natürlich auf der sicheren Seite.
Unter Linux kennt scanf() noch %i. Da wird dann je nach "Führung" (0x / 0) hex oder oct gelesen.int auswahl = 0; char x = '\n'; int anzahl = 0; [...] printf ("\nTestweise - auswahl: %d\n", auswahl); printf("Datei existiert bereits, soll sie neu angelegt oder fortgesetzt werden? 1-neu 2-fortgesetzt\n"); do { anzahl = scanf(" %d ", &auswahl); printf ("\nTestweise - anzahl: %d\n", anzahl); // returncode von scanf! Anzahl der erkannten %d bzw. Fehlercode } while (anzahl != 1); // scanf-Schleife des Todes. Erst bei Eingabe einer Ganzzahl kommst Du hier raus! while ((x = getchar()) != EOF && x != '\n'); // schmeißt unerwünschte newline-Gäste vom stdin-Spielplatz printf ("\nTestweise - auswahl: %d\n", auswahl); fgets(test, sizeof(test), stdin); [...]
-
Wutz schrieb:
Berndi schrieb:
setzt einfach das erste Element der fgets-Zielvariable auf 0, damit man sich später nicht rausreden kann, ein newline wäre schon vorher dringestanden (man hat ja keine Eingabe machen können)
Schwachfug.
/signed
-
p3t3r schrieb:
Unter Linux kennt scanf() noch %i.
Schwachfug.
-
Wutz schrieb:
p3t3r schrieb:
Unter Linux kennt scanf() noch %i.
Schwachfug.
http://www.kernel.org/doc/man-pages/online/pages/man3/scanf.3.html
Hier wird noch ein %i gemäß p3t3rs Beschreibung gelistet.
-
Du scheinst auch Probleme mit der deutschen Sprache zu haben.
In einem Forum zu C Standards C89/C99 die Aussage zu tätigen
"Unter Linux kennt scanf() noch %i"
ist Schwachfug, da %i gemäß beider Standards ein Standard-Spezifizierer für scanf ist und somit "Unter Linux kennt scanf() noch %i" Pfuscher JW Niveau bedeutet (palavert über Standard, hat aber keine Ahnung).
-
%i, %d macht keinen unterschied bei mir. Rückgabewert ist immernoch -1..
-
fabi1991 schrieb:
%i, %d macht keinen unterschied bei mir. Rückgabewert ist immernoch -1..
und was gibst du ein?
-
-1 deutet auf einen Fehler bei stdin hin, denn da gibt
scanf()
EOF zurück.
Hat evtl. was mit dem fork zu tun.
-
Ich habe das Programm jetzt aufs allergeringste abgespeckt.
starte ich "2" mit execv("2", vektor) funktioniert alles einwandfrei.
schreibe ich davor:
pid=fork();
if(pid==0)
execv("2", vektor);gibts das Problem.
ey ich raste gleich aus:(