[英]C fgets() to get input until EOF rather than enter twice
我正在創建一個程序來反轉輸入的每一行。
這是我的代碼:
#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鍵 ,以便能夠在其自己的行上輸入下一行輸入,但是我不明白為什么需要這樣做。
您的代碼完全符合所告訴的內容。 因此,如果您想在換行后的字符串后添加換行符,請在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]
}
^
注意return 0;
在C99及更高版本中是隱式的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.