Wie gebe ich Eingaben für ein C-Programm von Bash aus? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
leere Wand

Ich habe viel über Bash-Skripte und Programmtests gelesen, aber ich kann diesen Code immer noch nicht zum Laufen bringen.

Im Grunde ist es ein einfaches Programm, das den Benutzer nach einem der beiden fragt north east south oder west. Ich starte das Programm dann fragt es sofort nach Eingaben. Ich kann das Bash-Skript einfach nicht dazu bringen, ihm eine Eingabe zu geben. Ich habe versucht, mit echo und expect.

Jede Hilfe ist willkommen.

Hier ist die Funktion, die verwendet wird, um die Spielereingabe zu erhalten:

int process_input(Map *game)
{
    printf("\n> ");

    char ch = getchar();
    char a = getchar(); //eat enter

    int damage = rand() % 4;

    switch(ch) {

        case -1:
            printf("you suck\n");
            return 0;
            break;
        case 'n':
            game->proto.move(game, NORTH);
            break;
        case 's':
            game->_(move)(game, SOUTH);
            break;
        case 'e':
            game->_(move)(game, EAST);
            break;
        case 'w':
            game->_(move)(game, WEST);
            break;
        case 'a':
            game->_(attack)(game, damage);
            break;
        case 'l':
                    printf("You can go:\n");
                    if(game->location->north) printf("NORTH\n");
                    if(game->location->south) printf("SOUTH\n");
                    if(game->location->east) printf("EAST\n");
                if(game->location->west) printf("WEST\n");
                    break;
        default:
            printf("Whats next?", ch);
        }
        return 1;
}

Und hier ist der Versuch eines Bash-Skripts:

   #!/bin/bash
    /Desktop/c
    ./ex17 echo 'w'

  • Was versuchst du zu tun? Erstellen Sie ein C-Programm oder ein Bash-Skript?

    – Wallyk

    12. Mai 2013 um 15:20 Uhr

  • versuchen Sie, die Eingabe an die zu senden c program durch ein bash script?

    – abasu

    12. Mai 2013 um 15:21 Uhr

  • Ich verstehe wirklich nicht, was Sie wollen/fragen, und es sieht so aus, als wäre ich nicht allein.

    – zmo

    12. Mai 2013 um 15:22 Uhr

  • Ja, ich versuche, Eingaben in dieses Programm mit einem Bash-Skript zu senden.

    – leere Wand

    12. Mai 2013 um 15:29 Uhr

  • @blankwall zeigen, was Sie im Bash-Skript gemacht haben? Es ist einfach genug, es mit Zeilen in Bash zu füttern. Zeigen Sie AUCH Ihre main () in C

    – Ahmed Masud

    12. Mai 2013 um 15:33 Uhr


Benutzer-Avatar
Markus Reed

Sie können Eingaben von bash aus mit einem der folgenden Mechanismen in ein Programm eingeben.

Für eine einzelne Eingabezeile können Sie a verwenden Hier-String:

./ex17 <<<'w'

Für mehrere Zeilen können Sie a verwenden hier-Dokument:

./ex17 <<'EOF'
w
second line of input
more input
EOF

Oder Sie können diese Zeilen aus dem Skript in eine separate Datei verschieben:

./ex17 <filename    

Allgemeiner können Sie einen Befehl ausführen, der als Ausgabe die gewünschte Eingabe für Ihr Programm generiert, und sie mit a verbinden Rohr. Zum Beispiel könnte das Obige auch geschrieben werden:

cat filename | ./ex17

oder das ursprüngliche Beispiel als

echo w | ./ex17

Das ist allgemeiner, weil Sie ersetzen können cat und echo Hier mit jeder Art von Programm, das alle möglichen Berechnungen durchführen kann, um zu bestimmen, was es ausgibt, anstatt nur den Inhalt einer statischen Zeichenfolge oder Datei auszugeben.

Aber was Sie von bash aus nicht so einfach tun können, ist die Eingabe zu steuern, die Ausgabe zu lesen und Entscheidungen darüber zu treffen, was als nächste Eingabe gesendet werden soll. Dafür sollte man sich anschauen erwarten von. Ein Expect-Skript würde in etwa so aussehen:

#!/usr/bin/env expect
spawn ./ex17
expect ">"
send "w\n"
expect "Whats next?"
send "next line here\n"
# turn it back over to interactive user
interact

Versuchen Sie Folgendes: zuerst:

 echo w | ./ex17 

Dies sendet w an das Beispiel und gibt den Zug aus. Dies wird Rohrleitung genannt; und es verbindet im Wesentlichen die stdout von echo mit der stdin von ex17

Benutzer-Avatar
Arrigo Pierotti

Sie können entweder a C Code oder a Bash Skript, kein gemischtes. Verwenden scanf() zum Lesen von der Tastatur (es hört auf zu lesen, wenn Sie die EINGABETASTE drücken) und vervollständigen Sie diesen Code C Sprache.

  • Er versucht, Eingaben von Bash in sein C-Programm einzuspeisen, was durchaus möglich ist

    – Ahmed Masud

    12. Mai 2013 um 15:40 Uhr

1324020cookie-checkWie gebe ich Eingaben für ein C-Programm von Bash aus? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy