1

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

这是我的代码:

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

4

1 回答 1

2

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

putchar('\n');

而且您需要记住,没有保证c[strlen(c) - 1]是换行符。所以,在用 a 替换它之前检查它'\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 及更高版本中是隐含的。

于 2016-04-03T04:32:28.367 回答