C fgets()获取输入直到EOF而不是输入两次

时间:2016-04-03 04:14:39

标签: c ansi-c

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

这是我的代码:

#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 以便能够在其自己的行上输入下一行输入,但我不明白为什么我需要这样做

1 个答案:

答案 0 :(得分:2)

你的代码完全按照它所说的去做。因此,如果您想在反向字符串之后使用换行符,请在http PUT "http://localhost:8080/presence/active_watchers?filter={'presentity_uri':'sip:service-1@opensipstest.org'}" event_id=12 http PATCH "http://localhost:8080/presence/active_watchers?filter={'presentity_uri':'sip:service-1@opensipstest.org'}" event_id=12 循环之后使用以下内容:

for

你需要记住,putchar('\n'); 是一个换行符没有保证。因此,请在使用c[strlen(c) - 1]

替换之前进行检查
'\0'

此外,如果您遇到C89,您可能还需要从size_t len = strlen(c); if(len && c[len - 1] == '\n') c[len - 1] = '\0'; 返回一个值。只需添加

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] } ^ 隐含在C99及更高版本中。