我在做"猫的话|符号"(单词是文本文件,符号是 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
和@sort
。 sign
从文件words
获取其输入并将其输出发送到@sort
程序的输入,而 @sort
的输出则转到文件out
对于char words[80];
始终如此:
words != ""
因为这相当于&words[0] == &""[0]
...你只是比较指针 - 一个等于words
的开头,另一个指向字符串文字""
。他们总是不同的。
你可能的意思是:
strcmp(words, "") != 0
或者只是:
words[0] != 0