C fgets()获取输入直到EOF,而不是输入两次
我正在创建一个程序,可以反转每一行输入 这是我的代码:C fgets()获取输入直到EOF,而不是输入两次,c,ansi-c,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--) {
#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
321 cba
但当我开始输入下一行输入时,它就在反向输入的旁边,因此测试输入的完整程序运行如下所示:
abc 123
321 cAlorem ipsum
穆斯皮·梅罗多洛·希特·阿梅特
蒂斯罗尔德酒店
当它看起来像这样时:
abc 123
321 cba
乱数假文
穆斯皮梅洛
多洛·希特·阿梅特
蒂斯罗尔德酒店
作为一种解决方法,我在输出后再次按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]
}
^
注意
返回0代码>在C99及以上版本中是隐式的。一个程序来“反转”
?听起来您只需要一个print语句。在for
循环之后,printf(“\n”)代码>,否则您将在与第一行反向输入相同的行上输入下一行输入。您还应确保\n
偶数在字符串中。如果fgets
读取任何字符,除非发生错误,否则它不会返回NULL
。这意味着您可以阅读Hello
,而不是Hello\n
。由于
不会在缓冲区中,因此您将看到的是“Hello”,并且c[strlen(c)-1]=0代码>将导致您打印“lleH”而不是“olleH”。请不要将文本作为图像发布。用代码格式直接在问题中发布。在main
中也缺少return
语句以避免警告。@jdarthenay谢谢!补充。