Newbee Frage: Unerklärlicher Programmablauf
-
Hi,
ich habe ein merkwürdiges Phänomen mit diesem Programm:
Wenn ich es so wie es unten steht ausführe (kompiliert auf Linux mit gcc), dann überspringt er die zweite Benutzereingabe. Tausche ich allerdings die Blöcke um, also //2 steht oben, dann läuft es wie ich es erwarten würde. Ich habe keine Erklärung dafür und hoffe das mich jemand aufklären kann.
Grüße
int main(int argc, char** argv) { char string [] = ""; char c; //1 printf("\nGeben Sie einen beliebigen String ein: "); scanf("%s", string); printf("\nIn string steht %s", string); //2 printf("\nNach welchem Zeichen soll gesucht werden: "); scanf("%c", &c); printf("\nIn c steht %c ", c); return 0; }
-
Setzt mal nen Haltepunkt und schau, was direkt vor dem return in c steht. Könnte mir vorstellen, dass irgendiwe was aus dem String da rein rutscht.
-
Zunächst einmal beantragst du keinen Speicher für string!
scanf ist generell schlecht, da es keine komplette Zeile einliest sondern nur bis zum nächsten Leerzeichen. Außerdem ist die Funktion sehr unsicher (zumindest wenn man sie so benutzt wie du), da keine Maximaleinleselänge für den String mitgegeben wird.Und das Problem ist gar nicht so merkwürdig.
Im Tastaturpuffer liegt noch das Enterzeichen aus scanf. Der nächste Aufruf
von scanf nimmt das mit und nichts wird eingelesen.So Schluss mit meckern hier ist das Programm welches laufen sollte:
#include <stdio.h> int main(int argc, char **argv){ char string[100]; char c; //1 printf("\nGeben Sie einen beliebigen String ein: "); scanf("%99s", string); printf("\nIn string steht %s", string); getchar(); // hier wird das Enter aus dem Puffer genommen! //2 printf("\nNach welchem Zeichen soll gesucht werden: "); scanf("%c", &c); printf("\nIn c steht %c ", c); return 0; }
-
Und für den Fall das jemand mehr als 99 zeichen eintippt kannst du anstatt nur
getchar();
zu schreiben
while(getchar() != '\n') {};
schreiben
-
Ja, so geht es besser. Danke für eure Hilfe.