簡體   English   中英

C fgets()獲取輸入直到EOF而不是輸入兩次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM