C 学生级别的练习不起作用

C 学生级别的练习不起作用,c,C,我想创建一个程序,从用户那里请求10个等级,然后过滤通过和失败,然后打印通过和失败的数量。我做了程序,但输出是错误的 int pass,fail,grade,studentcounter; pass=0; fail=0; grade=0; studentcounter=10; while (studentcounter!=0) { printf("enter the next grade\n"); scanf("%d",grade); student--; } s

我想创建一个程序,从用户那里请求10个等级,然后过滤通过和失败,然后打印通过和失败的数量。我做了程序,但输出是错误的

int pass,fail,grade,studentcounter;

pass=0;
fail=0;
grade=0;
studentcounter=10;

while (studentcounter!=0)
{

    printf("enter the next grade\n");
    scanf("%d",grade);
    student--;
}

switch (grade)
{
case 1:
    if (grade >= 50)
        pass++;
    break;
case 2:
    if (grade <= 49)
        fail++;
    break;
}

}
printf("the number of fail is %d",fail);
printf("the number of pass is %d",pass);

}

问题是,程序要求10个等级,但最后它会将失败次数和通过次数打印为零。为什么?

您需要将通过/失败计数保留在while循环中,每次输入时都会覆盖grade变量

编辑:
另外,不要使用switch语句。

您需要将通过/失败计数保留在while循环中,grade变量将在每次输入时被覆盖

编辑:
另外,不要使用switch语句。

您正在输入一个年级编号。switch语句根据案例测试该等级,我非常确定等级不是1%或2%。在这种情况下,if语句更符合逻辑

其次,您有一个从未使用过的代码块。首先将studentcounter设置为零,然后说仅在studentcounter不为零时执行此块

studentcounter=0;

while (studentcounter!=0) {

printf("enter the next grade\n");

scanf("%d",grade);

student--;

}
第三个问题是,你拼错了分数

您可以按如下方式重写代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int pass,fail,grade,studentcounter;

pass=0;
fail=0;
grade=0;
studentcounter=0;

while (studentcounter < 10) {

printf("enter the next grade:\n");

scanf("%d",&grade);

if (grade >= 50) {
    pass++;
} else {
    fail++;
}

studentcounter++;
}


printf("the number of fail is: %d \n",fail);
printf("the number of pass is: %d \n",pass);
return 0;
}
对不起,如果我忽略了什么;我没有时间把它扔进我的编辑:P


干杯

您正在输入年级编号。switch语句根据案例测试该等级,我非常确定等级不是1%或2%。在这种情况下,if语句更符合逻辑

其次,您有一个从未使用过的代码块。首先将studentcounter设置为零,然后说仅在studentcounter不为零时执行此块

studentcounter=0;

while (studentcounter!=0) {

printf("enter the next grade\n");

scanf("%d",grade);

student--;

}
第三个问题是,你拼错了分数

您可以按如下方式重写代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int pass,fail,grade,studentcounter;

pass=0;
fail=0;
grade=0;
studentcounter=0;

while (studentcounter < 10) {

printf("enter the next grade:\n");

scanf("%d",&grade);

if (grade >= 50) {
    pass++;
} else {
    fail++;
}

studentcounter++;
}


printf("the number of fail is: %d \n",fail);
printf("the number of pass is: %d \n",pass);
return 0;
}
对不起,如果我忽略了什么;我没有时间把它扔进我的编辑:P


干杯

好的,上面的代码是一堆废话。我将把它留作练习,让您整理我为您确定的内容:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int pass = 0;
    int fail = 0;
    int grade= 0;
    int studentcounter;

    for (studentcounter=1; studentcounter<=10; studentcounter++ )
    {
        printf("Enter grade for student #%-2d  :", studentcounter);
        scanf("%d",&grade);

        if(grade >=50)
            pass++;

        if(grade<=49)
            fail++;
    }
    printf("the number of fail is %d\n",fail);
    printf("the number of pass is %d\n",pass);
}

如果这是家庭作业,请在交作业时给予学分。通过查看别人的代码,你可以学到很多东西,但千万不要声称自己创建了自己没有创建的代码。

好吧,现在的代码是一堆废话。我将把它留作练习,让您整理我为您确定的内容:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int pass = 0;
    int fail = 0;
    int grade= 0;
    int studentcounter;

    for (studentcounter=1; studentcounter<=10; studentcounter++ )
    {
        printf("Enter grade for student #%-2d  :", studentcounter);
        scanf("%d",&grade);

        if(grade >=50)
            pass++;

        if(grade<=49)
            fail++;
    }
    printf("the number of fail is %d\n",fail);
    printf("the number of pass is %d\n",pass);
}

如果这是家庭作业,请在交作业时给予学分。通过查看他人的代码,您可以学到很多东西,但千万不要声称创建了您没有创建的代码。

C“case”语句的工作方式与您期望的不同

它们在“常量表达式”上运行,这意味着为了完成您给定的任务,“确定一个等级是通过还是失败”,必须编写一个形式复杂的switch语句

switch ( grade ) { case 100: case 99: case 98: case 97: case 96: case 95: case 94: case 93: case 92: case 91: case 90: case 89: case 88: case 87: case 86: case 85: case 84: case 83: case 82: case 81: case 80: case 79: case 78: case 77: case 76: case 75: case 74: case 73: case 72: case 71: case 70: case 69: case 68: case 67: case 66: case 65: case 64: case 63: case 62: case 61: case 60: case 59: case 58: case 57: case 56: case 55: case 54: case 53: case 52: case 51: case 50: pass++; break; default: fail++; break; } 这可能会给你一个正确的答案,然而,你可能会因为写了这样一个怪兽而在家庭作业上“失败”


我会尝试思考另一个有“while、switch和if”语句的问题,或者您可以修改您当前的程序,使其不接受10个等级,而是提示用户是否希望输入另一个等级,并且只接受答案“Y”、“Y”或“N”,“n”因此“打开”该答案继续。

C“case”语句的工作方式与您预期的不同

它们在“常量表达式”上运行,这意味着为了完成您给定的任务,“确定一个等级是通过还是失败”,必须编写一个形式复杂的switch语句

switch ( grade ) { case 100: case 99: case 98: case 97: case 96: case 95: case 94: case 93: case 92: case 91: case 90: case 89: case 88: case 87: case 86: case 85: case 84: case 83: case 82: case 81: case 80: case 79: case 78: case 77: case 76: case 75: case 74: case 73: case 72: case 71: case 70: case 69: case 68: case 67: case 66: case 65: case 64: case 63: case 62: case 61: case 60: case 59: case 58: case 57: case 56: case 55: case 54: case 53: case 52: case 51: case 50: pass++; break; default: fail++; break; } 这可能会给你一个正确的答案,然而,你可能会因为写了这样一个怪兽而在家庭作业上“失败”


我会试着去想另一个有“while、switch和if”语句的问题,或者你可以修改你当前的程序,这样,它就不会接受10个等级,而是会提示用户是否希望输入另一个等级,并且只接受答案“Y”、“Y”或“N”、“N”,从而“切换”该答案以继续,有一种解决方案以合理的方式使用“开关”。我不会讨论这种方法的优点/缺点或“C”语言的神秘性,但为了证明它是可能的,这里是:

#include <stdio.h> int main(void) { int pass, fail, grade, answer, studentcounter; pass = 0; fail = 0; grade = 0; studentcounter = 10; while ( studentcounter-- ) { printf("enter the next grade\n"); scanf("%d", &grade); answer = ( grade > 49 ); switch ( answer ) { case 1: pass++; break; default: fail++; break; } } printf("the number of fail is %d \n", fail); printf("the number of pass is %d \n", pass); }
顺便说一句,有一种解决方案以合理的方式使用“开关”。我不会讨论这种方法的优点/缺点或“C”语言的神秘性,但为了证明它是可能的,这里是:

#include <stdio.h> int main(void) { int pass, fail, grade, answer, studentcounter; pass = 0; fail = 0; grade = 0; studentcounter = 10; while ( studentcounter-- ) { printf("enter the next grade\n"); scanf("%d", &grade); answer = ( grade > 49 ); switch ( answer ) { case 1: pass++; break; default: fail++; break; } } printf("the number of fail is %d \n", fail); printf("the number of pass is %d \n", pass); }
嗯,既然你必须使用swicth,我建议如下: 保留一个检查坡度是否大于50的变量,然后在开关内部使用该变量:


希望这对您有所帮助,因为您必须使用swicth,我建议您: 保留一个检查坡度是否大于50的变量,然后在开关内部使用该变量:

希望这对您有所帮助

2个错误:

1:while循环应该在switch语句之后结束。 2: 变量名为studentcounter,但正在递减student。 检查以下代码。这应该行得通

void main()
{
    int pass,fail,grade,studentcounter;

    pass=0;
    fail=0;
    grade=0;
    studentcounter=10;

    while (studentcounter!=0)
    {
        printf("enter the next grade\n");
        scanf("%d",grade);
        studentcounter--;

        switch (grade)
        {
            case 1:
                if (grade >= 50)
                    pass++;
                break;
            case 2:
                if (grade <= 49)
                    fail++;
                break;
        }

    }
    printf("the number of fail is %d",fail);
    printf("the number of pass is %d",pass);

}
2个错误:

1:while循环应该在switch语句之后结束。 2:您的变量名是studentcounter,但您正在递减student。 检查以下代码。这应该行得通

void main()
{
    int pass,fail,grade,studentcounter;

    pass=0;
    fail=0;
    grade=0;
    studentcounter=10;

    while (studentcounter!=0)
    {
        printf("enter the next grade\n");
        scanf("%d",grade);
        studentcounter--;

        switch (grade)
        {
            case 1:
                if (grade >= 50)
                    pass++;
                break;
            case 2:
                if (grade <= 49)
                    fail++;
                break;
        }

    }
    printf("the number of fail is %d",fail);
    printf("the number of pass is %d",pass);

}

首先,在发布代码时尝试缩进并使用“代码”格式按钮。第二,这闻起来像是一个家庭作业问题……是的,先生,这有点像家庭作业,但是老师让我们发明一个包含开关的程序,如果是这样的话,这段代码是100%由我写的对不起,如果我的问题很傻,但是这是我的第一篇帖子,所以我不知道规则。。在这里你像学生一样递减;在第一个while循环中,而不是studentcounter-;如果这是正在工作的原始代码,请先尝试缩进并在发布代码时使用“代码”格式按钮。第二,这闻起来像是一个家庭作业问题……是的,先生,这有点像家庭作业,但是老师让我们发明一个包含开关的程序,如果是这样的话,这段代码是100%由我写的对不起,如果我的问题很傻,但是这是我的第一篇帖子,所以我不知道规则。。在这里你像学生一样递减;在第一个while循环中,而不是studentcounter-;这是正在运行的原始代码吗?您不需要“else if”;用“其他”就行了!你知道,给学生答案并不能帮助他们学会思考。我很忙,想帮助别人,但没有看到标签作业,我道歉。是的,不需要“else-if”,但它本质上并没有错;用“其他”就行了!你知道,给学生答案并不能帮助他们学会思考。我很忙,想帮助别人,但没有看到标签作业,我道歉。是的,不需要“else if”,但它基本上没有错。使用“else”而不是两个测试。如果你投了反对票,留下评论是礼貌的。此解决方案没有问题。请使用“else”而不是两个测试。如果你投了反对票,请留下评论是礼貌的。这个解决方案没有错。