Dev-C++编译if语句内代码失败,多类编译错误求助
网球计分器代码编译错误修复方案
核心错误分析与修复步骤
- do-while循环语法缺失:你写的
do语句没有配套的while()条件,且循环体未用大括号包裹,这直接导致编译器解析混乱,触发前两个编译错误。do-while的标准格式是do { 循环体 } while(循环条件);。 - 赋值/比较运算符混淆:
if(punto=1)是赋值操作,会把1强制赋值给punto,导致这个分支永远为真,逻辑完全错误。必须用==做相等性比较。 - 拼写错误(
ptintf):错误提示里的ptintf是printf的拼写错误,若后续需要输出比分,务必修正拼写并正确调用。 - else匹配异常:因do-while的语法错误,编译器无法正确识别if语句的结构,进而抛出
else without a previous if错误,修复do-while后该问题会自动消失。
修正后的完整代码
#include <stdio.h> int main () { int giocatore1 = 0; int giocatore2 = 0; int punto; while(giocatore1 != 40 && giocatore2 != 40) { // 用do-while确保输入有效(仅接受1或2) do { scanf("%d", &punto); } while(punto != 1 && punto != 2); if(punto == 1) { if(giocatore1 < 30) { giocatore1 += 15; } else { giocatore1 += 10; } } else if(punto == 2) { if (giocatore2 < 30) { giocatore2 += 15; } else { giocatore2 += 10; } } // 可选:输出当前比分 printf("玩家1: %d, 玩家2: %d\n", giocatore1, giocatore2); } return 0; // 符合C标准的main函数返回值 }
额外提示
原代码的while(giocatore1!=40 && giocatore2!=40)逻辑不符合真实网球规则(40平后需要占先才能获胜),不过你提到循环外的空if暂未完善,这里先聚焦解决编译问题。后续可以补充40平、占先、获胜的判断逻辑。
内容的提问来源于stack exchange,提问作者Matty0055_
相关产品推荐
相关产品推荐

