我最近开始从Brian Kernighan和Dennis Ritchie的 The C Programming Language中学习C。在那本书中,有一个完整的小节(1.5.1,第 2 版),作者在其中创建了一个文件复制程序(但我将其用作文本(用户输入)复制程序)。他们的代码基本上是这样的
#include <stdio.h>
int main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
此代码在运行时工作正常,但程序永远不会停止。程序继续等待输入并继续复制它们,无休止地,永不终止。现在我想创建一个程序,这个无休止的复制确实会终止。为此,我稍微调整了代码。这是我的代码
#include <stdio.h>
int main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
return 0;
}
我认为return 0;
在最后明确写入可能会完成这项工作,但似乎输出根本没有改变。我还尝试使用 if-else 条件并将它们循环如下
#include <stdio.h>
int main()
{
int c;
c = getchar();
while (1) {
if (c != EOF){
putchar(c);
c = getchar();
}
else
return 0;
}
}
但是在这种情况下,程序也根本没有改变。
我的问题是如何更改代码,以便我的程序在复制一次后结束(或者,更好的是,将其推广到复制 n 次)?
在这里,对我来说重要的是澄清我所说的“一次”(或“n 次”)的意思。当我使用命令提示符(我使用 Windows)运行编译文件时,程序需要输入。我通过键盘输入输入,然后按下Enter查看复制的输入。在此之后,程序再次希望我输入一些输入。我不希望这种情况发生。我希望程序在复制我的输入一次后自行结束。这就是我所说的“一次”(上面的定义也可以很容易地扩展到“n 次”)。
@anatolyg和@Jabberwocky建议使用 \n (换行符)来使程序工作。但是当输入包含换行符时,此解决方案会失败,例如
我的代码
不起作用
我在
这里寻求帮助
将其复制到命令提示符中作为输入,并使用上述两个用户建议的程序仅my code does
作为输出产生,这不是我想要的输出。有什么办法可以让这个程序适用于带有换行符的文本块,并且在一个输入后让它停止(在这种情况下,整个文本块只是一个输入)?
在与这里的其他人互动之后,我开始意识到我对“一次输入”或“一次”的定义非常模糊、不清楚,而且一点也不具体。因此,无非是期望 C 不能做我想做的事。我接受了建议使用换行符作为终止程序的信号的答案,因为这与我的想法最接近。谢谢你们。