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



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

这是我的代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char c[100];
    while((fgets(c,100,stdin)) != NULL)
    {
        c[strlen(c) - 1] = '';
        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]是换行符是没有保证的。因此,在将其替换为'':之前,请对其进行检查

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

此外,如果您一直使用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及以上版本中是隐含的。

最新更新