2012-10-14 40 views
-2

我正在做“猫语词性符号”(单词是文本文件,符号是c程序)。但是,这似乎会产生无限循环。任何想法如何解决这个问题?如何使用bash将文本文件导入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"); 
    } 
} 
+0

我觉得你应该学会串用C –

+0

是如何工作的,我知道......我一直在使用C++,因为第一天我开始学习编程。但任何想法如何解决无限循环? – user1559897

+0

在一个问题中提出两个完全不相关的问题是不好的,并且不能解决问题 –

回答

1

程序到达EOF,scanf()words不变,导致至极总是words != ""是真实的。

而不是测试words,你应该测试feof(stdin)

+5

-1:不好的建议 - 测试'feof(stdin)'几乎总是错误的。你想检查'scanf'的返回值;它无法读取字符串时将返回0。 –

0

当你到了文件的末尾,scanf将无法​​找到一个词,将返回0(不改变words阵列。)您可以在while语句中直接调用scanfwhile(scanf("%s", words) == 1)

0

在bash中,><用于将输出重定向到文件并从中输入。因此< words表示程序将从words读取其标准输入,而> out表示它会将其标准输出写入out

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

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

0

这始终是真实的为char words[80];

words != "" 

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

你大概的意思是:

strcmp(words, "") != 0 

或者只是:

words[0] != 0 
相关问题