Вызов C-программы и предоставление двух входов через bash - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь ввести два аргумента "слушай" и "молчи" для моего C-кода через bash.Любая помощь будет оценена.Я просто застрял в направлении, в основном, как сделать строку 5 моего bash.

#Clear screen
clear
gcc -o anagram anagram.c
#./anagram listen silent
if [ './anagram listen silent' -eq 0 ]
then
        echo "Test succeeded"
else
        echo "Test failed"
        fi

и это часть моего C

    char inputTwo[100]; //Second input is cahracter with array size 100
    printf("Input first word: "); //Prints string
    scanf("%[^\n]%*c", inputOne);
    printf("Input second word: "); //Prints string
    scanf("%[^\n]%*c", inputTwo);
    if (lengthChar(inputOne) == lengthChar(inputTwo)) //Checks length of string
        {
        toLowerCase(inputOne); //Sets inputOne and inputTwo to lower case
        toLowerCase(inputTwo);
        if (sumChar(inputOne) == sumChar(inputTwo)) //Checks the sum of the character arrays and compares
                {
                        printf("Code 0, the two inputs are anagrams\n");
                        return 0;
            }
                else if (sumChar(inputOne) != sumChar(inputTwo))
        {
                        printf("Code 1, the two inputs are not anagrams\n");
                        return 1;
                        }
    }   
    else
        printf("Number of characters not the same\n"); //If they don't have the same number of characters, returns code 1
        return 1;
}   



Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Поскольку ваш C читает stdin, а не через аргументы командной строки , использование "здесь документа" и простой оболочки список тестов работает довольно лаконично,

./anagram <<EOW && echo "Test succeeded" || echo "Test Failed"
listen
silent
EOW
0 голосов
/ 16 февраля 2019

'./anagram listen silent' - строка, не выполняющая программу.Чтобы поймать результат запуска программы, используйте $(), например $(./anagram listen silent).

Однако ваш код на C не принимает этот тип передачи аргументов.Вы полностью читаете ввод из stdin, а не из параметра командной строки.

Способ принятия параметра командной строки заключается в объявлении основной функции int main() как int main(int argc, char *argv[]) (char **argv также в порядке), затем используйте argv, чтобы получить параметр командной строки.

Ваш код принимает входные данные только от stdin (используя scanf), тогда вам, возможно, придется пропустить ввод, вызывая программу наподобие echo -e "listen\nsilent" | ./anagram,Обернуть с помощью $(), чтобы поймать вывод, тоже нормально.

Обновление: Заметив, что вы хотите получить возвращаемое значение выполненной программы вместо вывода stdout, тогда выможно использовать > /dev/null, чтобы съесть вывод stdout, затем использовать $?, чтобы получить возвращаемое значение, например echo -e "listen\nsilent" | ./anagram > /dev/null; echo $?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...