究竟什么才算作标识符的声明?

What exactly qualifies as a declaration of an identifier?

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

{
    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只在循环中有效。您应该在循环之前声明它以使其在循环之后可用。

{
    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);
    }
}

for (int q = w; q > 24; q = q - 25) <- q 在这个块中没问题

for (int d = q; d > 9; d = d - 10) <- q 在此块中不存在

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

当您在第一个循环中声明 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);
    }
}```