如何使用 bash 将文本文件定向到 C 程序

How to direct a text file to a C program using bash?

本文关键字:程序 文件 何使用 bash 文本      更新时间:2023-10-16

我在做"猫的话|符号"(单词是文本文件,符号是 C 程序)。然而,这似乎产生了一个无限循环。知道如何解决这个问题吗?

以及是什么意思

sign < words | @sort > out

下面是 c 程序的代码。

int main(){
    char words[80];
    scanf("%s", words);
    printf(words);
    string_sort(words);
    printf(" ");
    printf(words);
    printf("n");
    while ( words != ""){
            scanf("%s", words);
            printf("%s", words);
            string_sort(words);
            printf("%s", " ");
            printf("%s", words);
            printf("n");
    }
 }

当程序到达 EOF 时,scanf()保持words不变,words != ""原因始终为真。

与其测试words,不如测试feof(stdin)

当你到达文件末尾时,scanf将无法找到单词,并将返回 0(不更改words数组。 您可以在 while 语句中直接调用scanf作为while(scanf("%s", words) == 1)

在 bash 中,>< 用于将输出重定向到文件和从文件输入。 所以< words意味着程序将从words读取其标准输出,而> out意味着它将将其标准输出写入out

|用于连接管道中的两个程序,第一个程序的输出转到第二个程序的输入。

所以sign < words | @sort > out运行两个程序sign@sortsign 从文件words获取其输入并将其输出发送到@sort程序的输入,而 @sort 的输出则转到文件out

对于char words[80];始终如此:

words != ""

因为这相当于&words[0] == &""[0]...你只是比较指针 - 一个等于words的开头,另一个指向字符串文字""。他们总是不同的。

你可能的意思是:

strcmp(words, "") != 0

或者只是:

words[0] != 0