初始化Switch Case

时间:2013-02-28 00:59:22

标签: c visual-studio-2010

我正在使用成绩报告构建程序,而我在使用开关案例计算GPA时遇到问题。我不确定为什么它没有分配正确的值。我还想要有一种方法来询问所采用的课程数量,然后让循环执行该次数。

以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Grades
{ 
char Name[20];
int Hrs;
int ID;
char ClassName[20];
char Grade;
char ClassID[6];
};


int main ()
{
struct Grades Transcript[6];
int classCnt = 0;
int vHrs=0, vGPA=0, totalHours=0, totalPoints = 0;
char vGrade;
char vName[20], vCID[6], vClassName[20];

printf("Enter Students Name: ");
    fgets(vName, 20, stdin);

do
{   printf("\nEnter Class ID: ");
        fgets(vCID, 6, stdin);
        fflush(stdin);
        strcpy_s(Transcript[classCnt].ClassID, vCID);
    printf("Enter Class Name: ");
        fgets(vClassName, 20, stdin);
        strcpy_s(Transcript[classCnt].ClassName, vClassName);
    printf("Enter Class Hours: ");
        fflush(stdin);
        scanf("%d", &vHrs);
        Transcript[classCnt].Hrs = vHrs;
    printf("Enter Class Grade: ");
        fflush(stdin);
        scanf("%c", &vGrade);
        Transcript[classCnt].Grade = vGrade;
    classCnt++;
    fflush(stdin);
    totalHours+=vHrs;
    switch (vGrade) {
    case 'A':
    case 'a': 4*vHrs; 
        break;
    case 'B':
    case 'b': 3*vHrs; 
        break;
    case 'C':
    case 'c': 2*vHrs; 
        break;
    case 'D':
    case 'd': 1*vHrs; 
        break;
    case 'F':
    case 'f': 0; 
        break;
    default: printf("Invalid Grade");}
    totalPoints += vGrade;
    vGPA = (totalPoints/totalHours);
}while(classCnt<=5);



printf("********************************** Grade Report:        *************************************");

printf("\n%d\n", totalHours);
printf("%d\n", vGPA);
system("Pause");
return 0;

2 个答案:

答案 0 :(得分:2)

表达式声明:

4*vHrs;

肯定在C中有效,但实际上并没有任何(a)

也许您可能希望将其分配给某些内容,例如:

addPoints = 4 * vHrs;

(当然事先声明addPoints)然后使用 来影响totalPoints

totalPoints += addPoints;

在要求类计数方面,您可以使用scanf("%d",...)从用户获取整数,然后在循环中使用该整数:

#include <stdio.h>

int main (void) {
    int num, count;

    printf ("Enter countdown value: ");
    scanf ("%d", &count);
    for (num = count; num > 0; num--)
        printf ("%d ", num);
    puts ("BLAST OFF");
    return 0;
}

示例运行:

Enter countdown value: 10
10 9 8 7 6 5 4 3 2 1 BLAST OFF

(a)即使是像42;这样的陈述也是有效的,尽管没用。允许这样做的原因是因为你可以在表达式中产生副作用。虽然没有多少学习者立刻看到这一点,但经典案例是值得尊敬的i++;

这是一个表达式,它为您提供i的当前值(除非您以某种方式使用它,否则您将丢弃它),然后将i作为副作用递增。

答案 1 :(得分:1)

case 'A':
    case 'a': 4*vHrs; 
        break;
    case 'B':
    case 'b': 3*vHrs; 
        break;
    case 'C':
    case 'c': 2*vHrs; 
        break;
    case 'D':
    case 'd': 1*vHrs; 
        break;
    case 'F':
    case 'f': 0; 

这些行都不会对您编写的程序产生任何影响。您可能希望将3*vHrs4*vHrs等分配给变量,然后执行下面的计算。你可能意味着vHrs *= 3vHrs *=4或类似的东西?