You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言do-while循环age未声明错误求助:实现年龄输入校验

解决do-while循环中变量作用域导致的未声明标识符错误

嘿,我一眼就看出问题所在啦——你遇到的所有错误都是变量作用域搞的鬼!咱们来一步步拆解:

问题根源

你在do代码块的内部声明了int age,这个变量的“生效范围”只限于do的大括号内部。当程序执行到while条件判断,或者后续的printf语句时,age已经被销毁了,编译器自然找不到它,所以抛出了undeclared identifier的错误。

修正方案

我们只需要把age的声明移到do-while循环的外面,让它的作用范围覆盖整个循环和后续代码,同时修正一处语法小问题(原代码while语句末尾缺分号)。

以下是修正后的完整代码:

#include <stdio.h>
#include <unistd.h>
#include <cs50.h> // 假设你使用CS50库的get_string和get_int函数

int main(void) {
    string name = get_string("What's your name?\n");
    printf("Hello, %s\n", name);
    sleep(1);
    
    // 将age的声明移到循环外部,扩大作用域
    int age;
    do {
        // 循环内仅赋值,不再重复声明age
        age = get_int("How old are you?\n");
    } while (age < 1 || age > 120); // 补上缺失的分号
    
    printf("Wow, %s you've been around for at least %i days!\n", name, age * 365);
    sleep(1);
    
    // 若有town相关逻辑,现在也能正常访问age了
    // string town = get_string("Where are you from?\n");
    // printf("So you're %i and from %s\n", age, town);
}

关键修改点

  • 调整变量作用域:把int age的声明从do块内移到循环外部,让while条件判断和后续printf都能访问到该变量
  • 修复语法遗漏:在while (...)末尾补上分号,这是C语言语句结束的必要标记
  • 避免重复声明:循环内部仅对age赋值,不再重新创建变量,保证作用域一致性

这样修改后,程序就能持续询问年龄直到用户输入0-120之间的数字,之后正常执行后续逻辑啦!

内容的提问来源于stack exchange,提问作者Ben

火山引擎 最新活动