2008-12-06 1 views
1

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

} 

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

+0

Прежде всего, попробуйте отступы и используя кнопку форматирования кода при отправке кода. Во-вторых, это пахнет домашней проблемой ... – 2008-12-06 15:03:03

+0

Да, сэр, это своего рода домашнее задание, но учитель попросил нас придумать программу, включающую переключатель, а если и так, то этот код на 100% написан мной извините, если мой вопрос глупо но это я первый пост, так что я не знаю правил – 2008-12-06 15:24:34

+0

ох .. здесь у меня студент, как student--; в первом цикле вместо studentcounter--; в том, что исходный код, который работает – 2008-12-08 13:11:24

ответ

4

Вы вводите номер класса. Оператор 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

веселит

0

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

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

0

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

#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

Утверждения 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 and if» или, возможно, вы можете изменить свою текущую программу таким образом, чтобы вместо того, чтобы принимать 10 оценок, она подсказала пользователю, хотят ли они ввести другой класс и принял только ответ «Y», «y» или «N», «n», таким образом, «переключая» на этот ответ, чтобы продолжить.

0

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

 
#include &ltstdio.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); 
} 
0

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


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

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

0

2 ошибки:

1: Цикл while должен заканчиваться после инструкции переключателя.
2: Ваше имя переменной «studentcounter», но вы уменьшаете «студент».
Проверьте следующий код. Это должно сработать.

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

} 
Смежные вопросы