【问题标题】:"scanf" as a condition in while loops“scanf”作为while循环中的条件
【发布时间】:2020-03-11 17:51:58
【问题描述】:

我需要使用“scanf”函数确定输入的大小(可能是无限的)。 现在我有限制,所以我不能使用字符串、数组或基本上任何不是函数的东西。

char input;
int counter = 0;
while (scanf(" %c",&input) == 1) counter++;

我面临的问题是循环是无限的, 我认为我的最终条件可能是错误的。我已经尝试了所有这些。

while (scanf(" %c",&input) > 0)
while (scanf(" %c",&input) != -1)
while (scanf(" %c",&input) != EOF)

我也尝试过“do-while”。

感谢帮助。

【问题讨论】:

  • scanf 返回匹配的 inout 说明符的数量,所以我将使用条件 == 1。此外,在这种情况下,我将%c 之前使用前导空格。 (不过,我不确定这些更改是否能解释您的问题。)
  • 你怎么知道循环是无限的?你让它永远运行吗?
  • @SteveSummit “现在我有限制,所以我不能使用字符串、数组或基本上不是函数的任何东西”让我想到了学校作业
  • 你是如何输入的?你如何表示输入结束?
  • @Nix 在 Unix 和类 Unix 系统下,是的,这是基本的(而且几乎是唯一的)方法。如果你真的很想这样做,你可以编写代码让它超时并在(比如说)一分钟不活动后退出,但这很难做到,而且几乎肯定不是你的导师所期望的。

标签: c while-loop scanf do-while


【解决方案1】:
//Assuming that input will be space seperated and will terminate when user presses "Enter".
#include<stdio.h>
int main()
{
        char input;
        while(1)
        {
                if(scanf("%c", &input))
               {
                        /*
                        * do someething
                         */
                        if(input=='\n')
                    {
                            break;
                    }
                    else
                    {
                            printf("%c\n", input);
                    }
            }

    }
    return 0;
}

【讨论】:

  • 这很有帮助!不过稍微更正一下-在我的情况下,需要遍历每个字符,同时丢弃以前的空格。所以你需要在第一次迭代的循环之外添加scanf(" %c",&amp;input)
猜你喜欢
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2023-03-26
  • 2021-10-17
相关资源
最近更新 更多