【问题标题】:Why is my program only printing my last number instead of all of the input numbers?为什么我的程序只打印我的最后一个数字而不是所有输入的数字?
【发布时间】:2022-11-21 10:54:54
【问题描述】:

我要解决的问题是“从键盘输入参加考试的学生人数,然后输入所有参加考试的学生的ID。程序应该将学生分为三组: ID 以数字 0、1 和 2 结尾的学生、ID 以数字 3、4、5 结尾的学生以及 ID 以数字 6、7、8、9 结尾的学生。程序应打印以下 ID每个组,按照输入的顺序排列。最多可以输入 1000 名学生。”。

我能想出的代码是

#include <stdio.h>

int main() {
int n,br,gr1,gr2,gr3;
    scanf("%d",&n);
    for (int i = 0; i < n; ++i) {
        scanf("%d", &br);

        if (br % 10 == 0 || br % 10 == 1 || br % 10 == 2) {
            gr1 = br;
        } else if (br % 10 == 3 || br % 10 == 4 || br % 10 == 5) {
            gr2 = br;
        } else if (br % 10 == 6 || br % 10 == 7 || br % 10 == 8 || br % 10 == 9) {
            gr3 = br;
        }
    }
    printf("Grupa 1\n%d\n",gr1);
    printf("Grupa 2\n%d\n",gr2);
    printf("Grupa 1\n%d\n",gr3);

return 0;
}

不是打印所有 ID 并将它们分类到组中,而是仅打印最后输入的编号和组编号。 我绝不是一个经验丰富的程序员,所以我不能真正说出我写这篇文章的方式有什么问题或如何解决它。如果你能指导我完成我将不胜感激

【问题讨论】:

  • 正确缩进代码。您的 if 语句不在 for 循环内。

标签: c for-loop


【解决方案1】:

你格式化代码的方式让你自己更难弄清楚发生了什么。您希望 if 语句位于 for 循环的主体中,而不是在它之后。最小化变量的范围是个好主意(即将 `int br; 移动到你需要它之​​前):

#include <stdio.h>

int main(void) {
    int n;
    scanf("%d",&n);
    for (int i = 0; i < n; ++i) {
        int br;
        scanf("%d", &br);
        if (br % 10 == 0 || br % 10 == 1 || br % 10 == 2) {
            printf("
Grupa 1
%d
", br);
        } else if (br % 10 == 3 || br % 10 == 4 || br % 10 == 5) {
            printf("
Grupa 2
%d
", br);
        } else if (br % 10 == 6 || br % 10 == 7 || br % 10 == 8 || br % 10 == 9) {
            printf("
Grupa 3
%d
", br);
        }
    }
}

这是一个示例运行:

3
1

Grupa 1
1
2

Grupa 1
2
2

Grupa 1
2

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 2014-12-14
    • 1970-01-01
    • 2015-08-26
    • 2021-09-04
    • 2021-12-09
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多