scanf() ohne jeden Parameter zu uebergeben



  • Hi, gibt es eine Moeglichkeit, dass bei diesem Beispiel:

    scanf("%s%s%s", command, para1, para2);
    

    ich nicht immer auf die Eingabe fuer para1 und para2 warten muss?
    Also wenn ich quasi nur exit eingebe, steht der String 'exit' ja in command. Nun muesste ich aber noch 2 weitere Sachen eingeben, damit das Programm fortfaehrt. Dies will ich aber nicht, ich will, dass das Programm sofort fortfaehrt, wenn ich keine para1 und para2 angegeben habe. Quasi sollen para1 und para2 so bleiben wie sie vorher waren und keine Eingabe brauchen!



  • Du solltest nicht scanf() nehmen um Strings einzulesen. fgets() ist hierfür besser geeignet.

    Du könntest doch in einer Schleife den String "command" einlesen und auf "exit" überprüfen. Je nach Ergebnis frägst du dann noch deine Parameter ab und gut ist.

    Oder du liest einen kompletten String mit Kommando und Parameter ein, also: "command param1 param2"
    Die Leerzeichen nimmst du dann als Delimiter und jagst das ganze durch strtok()*.

    * wobei strtok() auch mit Vorsicht zu geniessen ist...



  • und wie soll ich das jetz genau anfangen??? oder gibt es ne einfachere loesung?



  • char buffer[200]
    fgets(buffer,sizeof(buffer),stdin); //command einlesen
    if(!strncmp(buffer,"exit", sizeof("exit"))
    {
         //mache das was bei exit gemacht werden soll
    }
    if(!strncmp(buffer,"anderescommando", sizeof("anderescommando")))
    {
         // Parameter einlesen...
    }
    

    So z.B.



  • aber da koennte ich doch auch

    anderescommand exit
    

    eingeben, also quasi andersrum, und der wuerde das nicht merken...



  • XFame schrieb:

    aber da koennte ich doch auch

    anderescommand exit
    

    eingeben, also quasi andersrum, und der wuerde das nicht merken...

    Was dir TactX zu erklären versucht ist, dass du erst die ganze Zeile mit fgets() einlesen sollst und dann die Zeile parsen.

    zB könntest du nachher mit strtok() die Zeile zerlegen und die einzelnen worte dann abarbeiten.

    strchr() könnte auch sinnvoll sein.

    In C ist das anders als in einigen anderen Sprachen. Denn du kannst nicht so gut formatiert direkt einlesen. Das beste ist es meistens, die gesamte Eingabe einzulesen und dann auszuwerten.



  • und wie frag ich das dann nun ab??? also ich mein, wie funzt das mit strtok()???



  • TactX schrieb:

    char buffer[200]
    fgets(buffer,sizeof(buffer),stdin); //command einlesen
    if(!strncmp(buffer,"exit", sizeof("exit"))
    {
         //mache das was bei exit gemacht werden soll
    }
    if(!strncmp(buffer,"anderescommando", sizeof("anderescommando")))
    {
         // Parameter einlesen...
    }
    

    So z.B.

    momement sizeof("anderescommando") ist nicht das richtige, sizeof würde da die Größe des Pointers zurückliefern und nicht die Länge der Zeichenkette. Es ist strlen("anderescommando")

    XFame schrieb:

    und wie frag ich das dann nun ab??? also ich mein, wie funzt das mit strtok()???

    man: strtok(3)


Anmelden zum Antworten