2017-11-10 12 views
-1

生徒の番号を入力してから名前とマークを入力する必要があります。しかし、私はマークを入力すると、プログラムがクラッシュします。なぜ私は最後のループ関数に入ると私のプログラムがクラッシュするのか分かりません。私はあまりにも多くネストしたので、おそらく?ループ関数が入力されたときにクラッシュする

#include <stdio.h> 
    #include <string.h> 
    #define NAME_LEN 25 

    int noOfStud(void); 
    void listStudents(int noOfStud, char names[][NAME_LEN]); 
    void options(int noOfStud, double marks[]); 
    void switchOptions(int noOfStud, double marks[]); 
    void courseWork1(int noOfStud, double marks[]); 
    void emptyBuffer(void); 
int main(void) 
{ 
    int students; 
    char names[students][NAME_LEN]; 
    double marks[students]; 
    students = noOfStud(); 

    listStudents(students, names); 
    options(students, marks); 


    return 0; 
} 

int noOfStud(void) 
{ 
    int students; 
    printf("Number of students: "); 
    scanf("%d", &students); 
    getchar(); 
    return students; 
} 

void listStudents(int noOfStud, char names[][NAME_LEN]) 
{ 
    int i; 
    for(i=0; i<noOfStud; i++) 
    { 
     printf("Enter name: "); 
     scanf("%[^\n]", names[i]); 
     getchar(); 
    } 
} 

void options(int noOfStud, double marks[]) 
{ 
    printf("1. Enter marks for course work 1\n"); 
    printf("2. Enter marks for course work 2\n"); 
    printf("3. Enter makrs for course work 3\n"); 
    printf("4. Display a particular student's marks\n"); 
    printf("5. Supervisor mode\n"); 
    printf("6. Exi program\n"); 

    switchOptions(noOfStud, marks); 
} 

void switchOptions(int noOfStud, double marks[]) 
{ 
    char options; 

    printf("\nPlease enter a number for which choice you want: "); 
    scanf("%d", &options); 
    emptyBuffer(); 
    switch(options) 
    { 
     case 1: 
      printf("Thank you for chosing to enter marks for course work 1!\n"); 
      courseWork1(noOfStud,marks); 
      break; 
     case 2: 
      printf("Thank you for chosing to enter marks for course work 2!\n"); 
      break; 
     case 3: 
      printf("Thank you for chosing to enter marks for course work 3!\n"); 
      break; 
     case 4: 
      printf("work 4"); 
      break; 
     case 5: 
      printf("work 5"); 
      break; 
     case 6: 
      printf("work 6"); 
      break; 
     default: 
      printf("You didn't enter anything"); 
    } 
} 

void courseWork1(int noOfStud, double marks[]) 
{ 
    int i; 
    for(i=0; i<noOfStud; i++) 
    { 
     printf("Enter marks: "); 
     scanf("%d", &marks[i]); 
     getchar(); 
    } 

} 

void emptyBuffer(void) /* Empty the keyboard buffer */ 
{ 
    while(getchar() != '\n') 
    { 
     ; 
    } 

} 

最後のループ機能を入力するまでは問題なく動作しますが、クラッシュします。あなたはどんなアイデアを持っていますか?私を助けてくれてありがとう。

void courseWork1(int noOfStud, double marks[]) 
{ 
    int i; 
    for(i=0; i<noOfStud; i++) 
    { 
     printf("Enter marks: "); 
     scanf("%d", &marks[i]); 
     getchar(); 
    } 

} 
+0

http://idownvotedbecau.se/nomcve/ – klutt

+0

'チャート名[students] [NAME_LEN];は' students = noOfStud(); 'の後にする必要があります。 – mch

+0

'scanf("%d "、&options);' - > 'options'は' char'型です。これは 'scanf("%c "、&options);' –

答えて

0

%lf指定子で2回入力する必要があります。

scanf("%lf",&marks[i]);また

scanf("%c",&options);オプションは、char型であるため。

を使用すると、フォーマット指定子が間違っていると、未定義の動作になります。

main関数では、初期化されていない変数で配列を初期化しています。

適切な順序で配置する必要があります。

int main(void) 
{ 
    int students; 

    students = noOfStud(); 
    char names[students][NAME_LEN]; 
    double marks[students]; 
    listStudents(students, names); 
    options(students, marks); 


    return 0; 
} 
+0

です。それでもクラッシュします –

+0

@nikunikuD .:一度チェック...動作しています。あなたの入力は何ですか? – coderredoc

+0

ありがとうございました。 –

0

次のようにmain()関数では、いくつかの変更ください:

void courseWork1(int noOfStud, double marks[]) 
{ 
    int i; 
    for(i=0; i<noOfStud; i++) 
    { 
     printf("Enter marks: "); 
     //scanf("%d", &marks[i]); 
     scanf("%lf", &marks[i]); 
     getchar(); 
    } 

} 

とswitchOptions()関数テイク:

int main(void) 
{ 
    int students = noOfStud(); 
    char names[students][NAME_LEN]; 
    double marks[students]; 
    // students = noOfStud(); 

    listStudents(students, names); 
    options(students, marks); 


    return 0; 
} 

は、以下のようにcourseWork1()関数の中でいくつかの変更を行いますoptionsは整数型の変数です。

関連する問題