Студенческая практика не работает - PullRequest
1 голос
/ 06 декабря 2008

Я хочу создать программу, которая запрашивает у пользователя 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);

}

Проблема в том, что программа запрашивает десять оценок, но в конце она напечатает число неудач и число проходов как ноль. Почему?

Ответы [ 7 ]

4 голосов
/ 06 декабря 2008

Вы вводите номер класса. Заявление переключателя проверяет, что оценка против случаев, и я почти уверен, что оценки не 1% или 2%. Оператор if был бы более логичным выбором в этой ситуации.

Во-вторых, у вас есть блок кода, который никогда не используется. Сначала вы устанавливаете студенческий счетчик на ноль, а затем говорите: «Выполняйте этот блок, только если студенческий счетчик НЕ равен нулю» ...

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

ура

0 голосов
/ 11 декабря 2014

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);

}
0 голосов
/ 17 декабря 2008

хмм, так как вы должны использовать swicth, я предложу следующее: Сохраните переменную, которая проверяет, превышает ли оценка более 50, и затем используйте эту переменную внутри переключателя:


char pass_fail = (grade >= 50)? y : n;
switch( pass_fail )
{
case 'y': 
     // print pass
     break;
case 'n':
    // print fail
    break;
}

надеюсь, что это поможет вам

0 голосов
/ 06 декабря 2008

Кстати, есть решение, которое разумно использует «переключатель». Я не буду вдаваться в обсуждение преимуществ / недостатков этого подхода или изворотливости языка 'C', но просто чтобы доказать, что это возможно, вот оно:

#include &ltstdio.h&gt

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);
}
0 голосов
/ 06 декабря 2008

C 'case' не работают так, как вы ожидаете.

Они оперируют «постоянными выражениями», что означает, что для выполнения поставленной вами задачи «Определить, является ли оценка успешной или нет», нужно написать сложный оператор переключения в форме

  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», таким образом «включив» этот ответ для продолжения.

0 голосов
/ 06 декабря 2008

Хорошо, приведенный код - куча дерьма. Я оставлю это в качестве упражнения для вас, чтобы разобраться, что я исправил для вас:

#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);
}

PS. Если это домашнее задание, пожалуйста, отдайте должное, когда включите его. Вы можете многому научиться, глядя на код других людей, но никогда не претендуйте на создание того, чего у вас нет.

0 голосов
/ 06 декабря 2008

вам нужно сохранить количество проходов / неудач внутри цикла while, переменная оценки будет перезаписываться при каждом вводе.

редактирование: также не используйте оператор switch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...