【问题标题】:How can I make my program finish when there is no more std input in C++?当 C++ 中没有更多的 std 输入时,如何使我的程序完成?
【发布时间】:2017-02-18 22:29:04
【问题描述】:

我正在研究一种算法,当程序没有更多输入时,我被要求打印“QUIT”。

我正在使用

char c;
while(c = getchar()){...} 

因为我需要查找'\n' 字符和数字。

所以我复制了示例输入并将其粘贴到我的程序中进行测试,但它一直在等待另一个输入,因此当我提交它时,我得到了一个超过时间限制

PS:我不能使用多线程。

【问题讨论】:

  • 如何知道是否还有更多输入?如果你再等一秒钟,我可能会考虑按另一个键。

标签: c++


【解决方案1】:

getchar() 返回EOF 时,您可以停止,如下所示:

int c;
while ((c = getchar()) != EOF) {...}

请注意,c 需要声明为 int,而不是 char

要使您的程序更像 C++,请在循环中使用运算符 >> 而不是 getchar,如下所示:

char c;
while (cin >> c) {...} 

【讨论】:

  • 我使用 getchar() 因为使用 cin 它不会检测到额外的 '\n'
  • @Carlos 我明白了。那么cin.get(c)this answer更好。
【解决方案2】:

getchar() 返回一个 int,而不是一个 char。 特别是,它在文件末尾返回 EOF,EOF 通常为 -1。所以如果你把它存储在一个字符中,它永远不会等于 EOF。

int c;
while ((c = getchar()) != EOF) {

【讨论】:

    【解决方案3】:

    您是从文件中读取吗?如果是这样,getchar() 将返回 EOF:http://www.cplusplus.com/reference/cstdio/getchar/

    所以

        int c=getchar();
        while (c != EOF) {...}
    

    应该可以。

    【讨论】:

    • 你在正确的轨道上,但是这段代码 sn-p 不会改变 c 的值。您需要在循环体结束前添加c = getchar(); 或将while 语句更改为while ((c = getchar()) != EOF)
    • 谢谢。我只是假设他会在循环结束时更新变量,但记住这类事情总是好的。
    猜你喜欢
    • 2013-11-04
    • 2021-11-20
    • 2020-01-10
    • 1970-01-01
    • 2020-05-26
    • 2017-09-27
    • 2012-06-08
    • 2021-07-13
    • 2015-06-25
    相关资源
    最近更新 更多