Fak*_*Mod -2 c loops return infinite-loop while-loop
最近,我从开始学习C C程序设计语言由布莱恩·柯林汉和丹尼斯·里奇。在那本书中,有一个完整的小节(1.5.1,第 2 版),作者在其中创建了一个文件复制程序(但我将其用作文本(由用户输入)复制程序)。他们的代码基本上是这样的
#include <stdio.h>
int main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码在运行时工作正常,但程序永远不会停止。该程序一直在等待输入并继续复制它们,无休止地,永不终止。现在我想创建一个程序,使这种无休止的复制终止。为此,我稍微调整了代码。这是我的代码
#include <stdio.h>
int main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为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;
}
}
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,程序也完全没有改变。
我的问题是如何更改代码,以便我的程序在复制一次后结束(或者,更好的是,将其概括为复制 n 次)?
在这里,澄清我所说的“一次”(或“n 次”)对我来说很重要。当我使用命令提示符(我使用 Windows)运行编译文件时,程序需要输入。我通过键盘输入输入,然后按下Enter以查看复制的输入。在此之后,程序再次希望我输入一些输入。我不希望这种情况发生。我希望程序在复制我的输入一次后自行结束。这就是我所说的“一次”(上面的定义也可以很容易地扩展为“n 次”)。
@anatolyg和@Jabberwocky建议使用 \n(换行符)来使程序运行。但是当输入包含换行符时,此解决方案失败,例如
我的代码并
不会起作用,所以
我在
这里寻求帮助
将其作为输入复制到命令提示符中,并使用上述两个用户建议的程序仅my code does作为输出产生,这不是我想要的输出。有什么办法可以让这个程序为带有换行符的文本块工作,并让它在一次输入后停止(在这种情况下,整个文本块只是一个输入)?
在这里和其他人交流后,我开始意识到我对“一次输入”或“一次”的定义很模糊,不清楚,一点也不具体。因此,只能期望 C 不能做我想让它做的事情。我接受建议使用换行符作为终止程序的信号的答案,因为这与我的想法最接近。谢谢你们。
您return 0不会有任何区别,因为执行将停留在while直到c变为 EOF。所以你需要使c等于EOF。根据操作系统尝试 ctrl-D 或 ctrl-Z。
我的问题是如何更改代码,以便我的程序在复制一次后结束(或者,更好的是,将其概括为复制 n 次)?
引入一个计数器,如:
#define MAX_INPUTS 10
...
int cnt = 1;
while (c != EOF && cnt < MAX_INPUTS) {
putchar(c);
c = getchar();
++cnt;
}
Run Code Online (Sandbox Code Playgroud)