gpt4 book ai didi

C fgets() 在 EOF 之前获取输入而不是输入两次

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

我正在创建一个程序来反转每一行输入。

这是我的代码:

#include <stdio.h>
#include <string.h>

int main()
{
char c[100];

while((fgets(c,100,stdin)) != NULL)
{
c[strlen(c) - 1] = '\0';
for(int i=strlen(c); i>=0; i--)
{
printf("%c",c[i]);
}
}
}

我的测试输入:

abc 123
lorem ipsum
dolor sit amet

我可以打印第一行反转就好了:

abc 123
321 cba

但是当我开始输入下一行输入时,它就在反向输入的旁边,所以测试输入的完整程序运行看起来是这样的:

abc 123
321 cbalorem ipsum
muspi meroldolor sit amet
tema tis rolod

什么时候应该是这样的:

abc 123
321 cba
lorem ipsum
muspi merol
dolor sit amet
tema tis rolod

作为解决方法,我在输出后再次按 Enter 以便能够在其自己的行中输入下一行输入,但我不明白为什么我需要这样做。

最佳答案

您的代码完全按照要求执行。因此,如果您想要在反转字符串之后添加换行符,请在 for 循环之后使用以下内容:

putchar('\n');

并且您需要记住,不能保证 c[strlen(c) - 1] 是换行符。因此,在用 '\0' 替换它之前检查它:

size_t len = strlen(c);
if(len && c[len - 1] == '\n')
c[len - 1] = '\0';

此外,如果您坚持使用 C89,您可能还需要从 main 返回一个值。只需添加

return 0; /* Usually, 0 indicates success */

为了消除警告,在 main 的末尾:

source_file.c: In function ‘main’:
source_file.c:8:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^

请注意,return 0; 在 C99 及更高版本中是隐式的。

关于C fgets() 在 EOF 之前获取输入而不是输入两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36381553/

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