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

如何用单个变量实现多输入打印?do-while循环输入验证难题

问题解决思路

首先修正你代码里的明显错误:

  • 你定义了变量p,但输入玩家数量时用了未定义的gs,应该改成&p
  • 循环结束后i的值是p+1,最后一行打印的玩家编号会出错,应该用i-1

接下来分两部分解决你的问题:

1. do-while循环的输入验证

假设题目要求分数必须是非负整数,在输入后判断合法性,不合法就重新输入当前玩家的分数,不递增i:

int p, score, i = 1;

printf("Enter the number of players: ");
scanf("%d", &p);

do{
  printf("Enter score of player #%d: ", i);
  scanf("%d", &score);
  
  // 验证分数是否为非负整数,可根据题目要求调整规则
  if(score < 0){
    printf("错误:分数不能为负数,请重新输入\n");
    continue; // 不递增i,重新输入当前玩家的分数
  }
  
  i++;
        
} while(i <= p);

2. 循环结束后重新打印所有输入

你的核心问题在于单个score变量只能存储最后一个输入的分数,无法保存所有玩家的分数。如果严格要求不能新增任何变量,仅用现有的p, score, i三个int变量,是不可能存储多个分数的——因为单个int只能存一个数值。

这时候大概率是题目里的「指定变量」允许使用数组(可能你漏看了要求,或者变量名写错了)。如果允许使用数组作为指定变量,修改代码如下:

// 假设scores是题目允许使用的指定变量(替换原来的单个score)
int p, scores[100], i = 1;

printf("Enter the number of players: ");
scanf("%d", &p);

do{
  printf("Enter score of player #%d: ", i);
  scanf("%d", &scores[i-1]);
  
  // 输入验证逻辑
  if(scores[i-1] < 0){
    printf("错误:分数不能为负数,请重新输入\n");
    continue;
  }
  
  i++;
        
} while(i <= p);

// 循环结束后打印所有分数
i = 1;
do{
  printf("Score of player #%d: %d\n", i, scores[i-1]);
  i++;
} while(i <= p);

如果确实严格只能用三个int变量,那只能在输入每个分数的同时先打印一次,循环结束后无法重新打印所有历史输入——因为没有存储的地方。这种情况下你需要和出题人确认变量限制的具体要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:53:20