c计划将学生分组

时间:2012-08-07 19:52:54

标签: c

帮助,我似乎无法在下面的代码中找出问题。

这是我想要做的:输入标记列表。输入以0结尾(0本身不是某人的标记)。输出得分的学生人数 1)大于或等于85; 2)介于60和84之间; 3)严格不超过60。

这是我的代码:

#include stdio.h

int main() {
    int mark;
    int morethan85 = 0, between60and84 = 0, lessthan60 = 0;

    for (true) {
        scanf("%d", &mark);
        if (mark != 0) {
            if (mark >= 85)
                morethan85 = morethan85 + 1;
            else if (mark < 85 && mark >= 60)
                between60and84 = between60and84 + 1;
            else
                lessthan60 = lessthan60 + 1;
        } else
            break;
    }

    printf(">=85:%d, morethan85");
    printf("60-84:%d, between60and84");
    printf("<60:%d, lessthan60");

}

2 个答案:

答案 0 :(得分:3)

printf(">=85:%d, morethan85");
                           ^

你正在打印普通字符串。试试这个:

printf(">=85:%d", morethan85);
               ^

另外,严格来说,传递的参数少于格式字符串所需的参数是未定义的行为。

答案 1 :(得分:0)

哇。很多东西都在这里评论。

  1. 首先,“true”无效C.您可以定义名为TRUE的宏或常量并将其设置为“1” - 或者只使用1。

  2. 如果你循环浏览某些内容直到它中断,请使用while()而不是()。

  3. 最后,您的代码无效的原因是您在printf()函数中的变量名后添加了引号。

  4. 以下是您的代码的工作版本:

    #include <stdio.h>
    
    int main() {
        int mark;
        int morethan85 = 0;
        int between60and84 = 0;
        int lessthan60 = 0;
    
        while (1) {
            scanf("%d", &mark);
            if (mark != 0) {
                if (mark >= 85)
                    morethan85 ++;
                else if (mark < 85 && mark >= 60)
                    between60and84 ++;
                else
                    lessthan60 ++;
            } else
                break;
        }
    
        printf(">=85:%d\n", morethan85);
        printf("60-84:%d\n", between60and84);
        printf("<60:%d\n", lessthan60);
    
    }