如何用单个变量实现多输入打印?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
相关产品推荐
相关产品推荐

