调用C程序并通过bash提供两个输入

时间:2019-02-16 16:36:28

标签: c bash

我试图通过bash向我的C代码输入两个参数“ listen”和“ silent”。任何帮助,将不胜感激。我只是停留在重定向上,主要是如何执行bash的第5行。

#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 :(得分:1)

'./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来吃{{ 1}}输出,然后使用stdout获取返回值,例如$?

答案 1 :(得分:1)

由于您的C在$('.topScroll').click(function(){ $("html, body").animate({scrollTop : "0px"},"fast"); }); 而不是via command line arguments上进行读取,因此,使用"here document"和简单的shell list tests可以非常简洁地工作。

stdin