出现error: expected expression错误,如何修正do-while循环条件?
C语言error: expected expression错误分析与修复
错误原因拆解
你的代码存在多个问题,直接导致了error: expected expression以及其他潜在逻辑错误:
- 变量作用域问题:
answer在do代码块内部声明,while条件所在的外部作用域无法访问该变量,且不能在while的条件表达式中重复声明变量。 - 运算符误用:使用赋值运算符
=而非相等比较运算符==,完全违背了判断逻辑。 - 字符常量格式错误:
y和n是字符常量,必须用单引号'y'、'n'包裹,否则编译器会将其视为未定义变量。 - get_char函数使用错误:CS50的
get_char不支持格式化输出,不能像printf那样携带%s、%i这类占位符,需先通过printf输出信息,再调用get_char获取输入。
修正后的代码
#include <stdio.h> #include <cs50.h> int main (void) { string name = get_string("What's your name? "); int age = get_int("What's your age? "); // 手机号建议用字符串存储:避免长度超出int范围、开头0被忽略的问题 string phone = get_string("What's your phone number? "); char answer; do { // 先通过printf输出格式化信息 printf("Are the information below correct? (y or n): \n Name: %s \n Age: %i \n Phone: %s\n", name, age, phone); // 单独调用get_char获取用户输入 answer = get_char(); // 清理输入缓冲区的换行符,避免后续读取异常 while(getchar() != '\n'); } // 循环条件:输入不是'y'也不是'n'时,重复询问 while (answer != 'y' && answer != 'n'); return 0; }
额外说明
- 手机号用
int存储存在缺陷:常规手机号长度超过int类型的取值范围(4字节int最大值约20亿),且开头的0会被自动忽略,改用string存储更合理。 - 调用
get_char后清理缓冲区换行符是必要操作,否则下次读取输入时会直接读取到残留的换行符,导致逻辑异常。
内容的提问来源于stack exchange,提问作者DiodE
相关产品推荐
相关产品推荐

