我正在创建一个反转每一行输入的程序。
这是我的代码:
#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及以上版本中是隐含的。