【问题标题】:Loop For User Input循环用户输入
【发布时间】:2011-10-30 08:49:47
【问题描述】:

我想编写一个程序,它一直要求用户输入,直到我用 ctrl+D 打破它。这是我所拥有的:

char input[100];
while(input != EOF){
       printf("Give me a sentence:\n");
       fgets(input, 5, stdin);
       printf("your sentence was: %s\n", input);
}

我希望 fgets 从新输入的前 5 个字符重新开始,而不是像最后一个输入的第 6 个字符那样循环,而且我也不知道如何在 while 上写条件来中断通过ctrl+D出来。现在你可以看到输入(这是一个 char[] 正在与 EOF 进行比较)。

感谢您的任何建议。

【问题讨论】:

    标签: c input stdin fgets


    【解决方案1】:

    我认为您正在寻找函数 feof。

    char input[100];
    while(!feof(stdin)){
           printf("Give me a sentence:\n");
           fgets(input, 5, stdin);
           printf("your sentence was: %s\n", input);
    }
    

    【讨论】:

    • 啊,谢谢,这适用于 ctrl+d 的东西。但是,它不会打印我刚刚输入的行。似乎没有清除标准输入或其他东西,因此它会在每个循环中不断将打印输出添加到一起。
    • 它可以在我的电脑上运行,除了它会切线(由于 fgets 的第二个参数 5)。
    • 是的,将第二个参数更改为 100 使其完美运行。
    • 哦,是的,我的错。当字符小于 5 时,它似乎可以工作,但是当字符超过 5 时,输出有点奇怪。我只希望它每次都打印我输入的前 5 个字符。我想我可以不用它处理,然后再解析输入。再次感谢。
    • 查看 printf 的规格,这就是您想要的。 codepad.org/DCJHqwnU
    【解决方案2】:

    您不必担心“检测” ctrl-D,因为这是您的程序看不到的外壳程序。在担心 ctrl-D 问题之前,您应该在修复代码时考虑使用输入重定向

    ./myExecutable < inputFile
    

    【讨论】:

    • 但是在我执行 ctrl-D 后我的循环并没有停止
    • @Matt ctrl-D 应该会让你的程序看到 EOF。如果你的 EOF 检测正确,你就会得到你想要的。
    • @JustJeff 我知道,所以我想问我如何检测 EOF。
    猜你喜欢
    • 2013-11-16
    • 2020-02-15
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    相关资源
    最近更新 更多