【问题标题】:c language:make fgets to keep taking input until I press enter twice?c语言:让fgets继续输入,直到我按两次回车?
【发布时间】:2010-04-29 05:32:00
【问题描述】:

嗨,我想问一下我将如何修改这个问题的代码:(它只接受一个输入然后将其打印出来。我希望它继续运行,直到我按两次输入 (\n)。

#include <stdio.h>

#define MAXLENGTH 1000
int main(void) {
    char string[MAXLENGTH];

    fgets(string, MAXLENGTH, stdin );
    printf("%s\n", string);

    return  0;
}

我对 fgets(string, MAXLENGTH, stdin); 感到困惑行,stdin 是什么意思/做什么?

编辑:克里斯,我试过你的方法:

    #include <stdio.h>

#define MAXLENGTH 1000
int main(void) {
    char string[MAXLENGTH];


    do {
    if (!fgets(string, MAXLENGTH, stdin ))
        break;
    printf("%s", string);
    }
} while (string[0] != '\n');


    return  0;
}

它在我按 Enter 后打印,但我想先输入整个列表,然后在我按两次 Enter 后让它打印列表。

【问题讨论】:

    标签: c


    【解决方案1】:

    试试这个:

    #include <stdio.h>
    #include <string.h>
    
    #define MAXLENGTH 1000
    int main(void) 
    {
        char string[MAXLENGTH];
    
        int i = 0;
        for(;;++i)
        {
            string[i] = getchar();
            if (i > 0 && string[i] == '\n' && string[i-1] == '\n') break;                
        }
    
        string[i] = 0;
    
        printf("Print it again:\n%s",string);
    
        return  0;
    }
    

    【讨论】:

    • 谢谢,这也可以。哪种方法更好?,我现在需要修改列表,使其在前面打印一个数字。
    • @Chris Dodd:是的,我知道,就像这里的所有其他答案一样
    【解决方案2】:
    do {
        if (!fgets(string, MAXLENGTH, stdin ))
            break;
        printf("%s", string);
    } while (string[0] != '\n');
    

    将继续读取输入并打印它,直到它看到一个空行(连续两次按 Enter)或直到 EOF。

    stdin 指的是程序的标准输入,它是当你运行它时它连接到的任何输入源。如果您只是在命令行中运行它而没有额外的 shell 重定向,那将是键盘。

    【讨论】:

    • 克里斯,我已经编辑了我的帖子,它没有打印任何东西,但 fgets 工作正常。还有其他方法吗?我不能使用任何休息时间(功课),!fgets 是什么意思?
    • @wello horld:您已将printf 放入if 正文中。完全按照 Chris 所写的方式去做。
    • 哦,我现在明白了,谢谢。但我希望它在我输入整个列表后打印出来......有什么想法吗?我尝试将 printf 放在 while 行之后,但没有运气..
    【解决方案3】:

    如果您想在按两次返回键后打印整个输入,您可以这样做:

    char string[MAXLENGTH];     // to hold a single input line.
    char strings[MAXLENGTH]=""; // to hold the entire input lines.
    do {
    
        if (fgets(string, MAXLENGTH, stdin ) == NULL)
            break;
        strcat(strings,string);
    } while (string[0] != '\n');
    printf("%s", strings);
    

    【讨论】:

    • 我得到了一个“不兼容的内置函数'strcat'的隐式声明......
    • #include&lt;stdio.h&gt;之后的顶部添加#include &lt;string.h&gt;
    • 太棒了,现在可以使用了!我生命的最后三个小时终于有意义了,谢谢!顺便说一句,如果我使用break,我会失去分数......有什么方法可以替换它吗?
    • @wello - 任何因使用break 语句正确、干净地控制流程而扣分的人都疯了,并且盲目地遵守他/她不理解的规则。如果必须的话,你可以这样做,但老实说,如果你把它留在里面,它会更干净、更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多