You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:17:19