如何使用 bash 将文本文件定向到 C 程序
How to direct a text file to a C program using 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");
}
}
当程序到达 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
相关文章:
- make 命令创建 .file,但不创建应用程序文件
- C++对象文件和程序文件组合编译的 Bashrc 别名
- 程序文件中的安装路径:一些问题
- 词频程序 - 文件输入太大?
- 使用带有 MEX 包装器的帮助程序 C 文件从 MATLAB 2016 调用C++代码时出现问题
- 如何修复"无法打开包含文件'boost/config.hpp':没有这样的文件或目录(包括目录涵盖:C:\程序文件\boost\boost_1_67_0)
- MacOS应用程序文件关联
- Visual Studio - C++ - 以 32 位或 64 位构建和运行应用程序 - 从适当的程序文件目录加载 D
- Windows 8 应用商店应用程序C++文件访问
- 检索C++程序/文件中使用的指针变量列表
- Visual Studio使用多线程DLL发布应用程序文件
- 为什么不将.cpp转换为c程序文件呢
- C++获取程序文件目录,附加额外路径并执行
- C++创建程序文件中文件的进程
- 在应用程序文件夹中安装 C/C++ 库"IGRAPH"
- 使用 Dev-C++ 5.2.0.2 进行调试 - 调试时找不到程序文件 gdb.exe
- 创建无需任何外部执行即可连续侦听的守护程序文件
- Qt单一应用程序文件已打开
- 问题.所有功能都可以在发布文件夹中工作,但不能在程序文件中工作
- 应用程序文件没有在不同的mac上运行