【问题标题】:What exactly qualifies as a declaration of an identifier?究竟什么才是标识符的声明?
【发布时间】:2021-03-07 09:36:37
【问题描述】:

我正在尝试构建一些代码,以便它接受用户的输入,运行一个循环,获取该循环的结束值,然后通过第二个循环运行该值(我也每次添加到一个计数器循环运行并在最后打印),这是我编写此代码的尝试:

{
    float input = get_float("%s", "Input: ");
    float w = input * 100;
    {
    int c = 0;
    for (int q = w; q > 24; q = q - 25)
        {
        c++;
        }
    for (int d = q; d > 9; d = d - 10)
        {
        c++;
        }
    printf("%i", c);
    }
}

我收到的错误是error: use of undeclared identifier 'q'。我认为,由于它在代码的早期使用,所以以后识别它不会有问题,尽管显然这不是真的。任何关于现在正确声明“q”的建议将不胜感激 - 或者我的整个方法可能只是被误导了?

【问题讨论】:

  • 变量/标识符有自己的范围q 在声明它的 for 循环块的范围内。

标签: c undeclared-identifier


【解决方案1】:

循环中声明的q 仅在循环中可用。您应该在循环之前声明它以使其在循环之后可用。

{
    float input = get_float("%s", "Input: ");
    float w = input * 100;
    {
    int c = 0;
    int q; // declare q before the loop
    for (q = w; q > 24; q = q - 25) // no declaration of q here
        {
        c++;
        }
    for (int d = q; d > 9; d = d - 10)
        {
        c++;
        }
    printf("%i", c);
    }
}

【讨论】:

    【解决方案2】:

    当您在第一个循环中声明 q 时,它仅作为局部变量存在于该循环中

    for 范围之外声明变量将使其在第二个循环中可访问

    {
        float input = get_float("%s", "Input: ");
        float w = input * 100;
        {
        int c = 0;
        int q;
        for (q = w; q > 24; q = q - 25)
            {
            c++;
            }
        for (int d = q; d > 9; d = d - 10)
            {
            c++;
            }
        printf("%i", c);
        }
    }```
    

    【讨论】:

      【解决方案3】:

      for (int q = w; q > 24; q = q - 25)

      for (int d = q; d > 9; d = d - 10)

      int c = 0;下方添加int q;并将for (int q = w; q > 24; q = q - 25)修改为for (q = w; q > 24; q = q - 25)

      【讨论】:

      • 仅添加int q; 会使其未初始化并在第二个for 循环中造成问题。 intint q = w; 应在添加后删除。
      • @MikeCAT 你能解释一下你的意思吗?
      • 是的,我的回答应该更清楚。我将对其进行编辑,使其与您上面的回复一致。
      猜你喜欢
      • 2010-10-14
      • 2019-06-07
      • 2017-02-27
      • 1970-01-01
      • 2014-10-28
      • 2012-08-27
      • 2010-11-12
      • 2011-03-18
      • 2011-01-22
      相关资源
      最近更新 更多