2013-02-28 47 views
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; 

回答

2

的表達式語句:

4*vHrs; 

在C肯定有效,但它實際上並沒有做任何(一)

也許你可能想將其分配到的東西,比如有:

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 

(一)即使像42;聲明是有效的,但沒用。這是允許的原因是因爲你可以在表達式中有副作用。經典案例,儘管並不是很多學習者立即看到這一點,但它是值得尊敬的i++;

這是一個表達式,它爲您提供當前值i(除非您以某種方式使用它,否則將其丟棄),然後將i作爲副作用遞增。

+0

哇。我完全忘記了這一點,只是把它作爲4 * vHrs什麼也不做。我甚至在我的日曆上寫下了一張便條,上面掛着我......哈哈。十分感謝你的幫助! – user2084990 2013-02-28 01:07:51

+0

如果我設計過一門語言,我會忽略'++'功能。地獄裏有一種以該運營商命名的語言!只有一個瘋子纔會使用:-) – 2013-02-28 01:15:04

+1

@Aniket,當編碼器被迫在'bigHonkinVariableName ++'和'bigHonkinVariableName = bigHonkinVariableName + 1'之間選擇時,我懷疑他們會選擇前者:-) – paxdiablo 2013-02-28 01:17:32

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或類似的東西?