gpt4 book ai didi

c - 输入重定向不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:12 25 4
gpt4 key购买 nike

我的指导:编写一个重复(直到文件末尾)读入一个字符的程序来自输入流。如果字符是大写,则将其更改为小写并将其写入输出流。对于所有其他字符,写字符不变到输出流。输入使用getchar(),输出使用putchar(),使用输入重定向用于将输入文件连接到程序

我的项目名称是 Input,我的文本文件是 input.txt。当我运行它时,我输入“Input < input.txt”尽管该程序只是在命令窗口中模仿它,但我如何让它从文本文件中读取?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
char c, x;


c=getchar();

while (c != EOF)
{

c=getchar();
x = tolower(c);
if (isupper(c))
{
putchar(x);

}
else
{
putchar(c);

}

}
system("Pause");
}

最佳答案

我认为问题在于您不想转到程序并输入 Input < input.txt .相反,您想打开一个终端程序,将目录更改为包含项目的目录,然后通过编写 Input < input.txt 从命令行运行该程序。 .这将启动程序并使用 input.txt 的内容作为标准输入流,而不是从控制台读取文本。

也就是说,您的代码中有两个错误。首先,请注意您有这条线

c = getchar();

在执行输入读取的循环之外。然后你立即打电话

c = getchar();

再次进入循环。这意味着您将丢弃读入的第一个字符。

其次,你的循环比它需要的多运行了一次。如果第二次调用getchar()返回 EOF ,在当前循环迭代完成之前,您不会检测到这一点。这是因为您检查了 EOF位于循环的顶部,直到您打印出 EOF 之后才到达循环的顶部特点。要解决此问题,请考虑使用半循环惯用语并在中间跳出循环:

for (;;) {
/* Read data. */
if (/* no data left */) break;

/* Process data. */
}

从风格上讲,您确定同时需要 if 吗?和 else分支在这里?回想一下 tolower不会更改非大写字符的值,因此使用一种大写字母和一种小写字母是多余的。您可以只输出 tolower 产生的字符没有特殊情况。

希望这对您有所帮助!

关于c - 输入重定向不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14595235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com