1

成績レポートを使用してプログラムを作成していますが、スイッチケースを使用して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;
4

2 に答える 2

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し、副作用として増分する式です。

于 2013-02-28T01:02:15.300 に答える
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*vHrsしてから、以下の計算を行うことができます。4*vHrsあなたはおそらく、vHrs *= 3またはvHrs *=4そのようなことを意味していましたか?

于 2013-02-28T01:05:39.227 に答える