Pike语言单输入决策处理异常:流程错误问询
问题成因及修复方案
核心问题出在sscanf的参数传递方式上——你没有使用引用传递,导致变量X始终是初始化的0,根本没拿到你输入的数值。
在Pike里,sscanf要把解析结果写入变量,必须在变量名前加&符号传引用。你当前写的sscanf(Stdio.stdin.gets(), "%d", X);是传值调用,sscanf没办法修改X的实际值,X会一直保持0。
不管你输入≥10还是<10的数,X都是0,X >=10的判断永远为假,只会走else分支计算立方(0的立方还是0),这就导致结果完全不符合预期。
修复后的代码如下:
int main() { int X = 0; int Y = 0; // 给X添加&,传递引用让sscanf能修改它的值 sscanf(Stdio.stdin.gets(), "%d", &X); if (X >= 10) Y = pow(X, 2); else Y = pow(X, 3); write("%d\n", Y); return 0; }
另外你第一个“正常运行”的程序其实也有同样的写法问题,只是刚好逻辑上没暴露——如果输入解析失败,X和Y都会保持0,比较逻辑依然能执行,但正确的写法同样需要给X和Y加&:
int main() { int X = 0; int Y = 0; sscanf(Stdio.stdin.gets(), "%d", &X); sscanf(Stdio.stdin.gets(), "%d", &Y); if (X <= Y) write("%d\n", X); else write("%d\n", Y); return 0; }
内容的提问来源于stack exchange,提问作者SwFly
相关产品推荐
相关产品推荐

