2013-03-09 52 views
0

確定,所以如果固定了起來,我這像樣的進入,如果是getinfo功能(使用codebloks BTW IM)之後的年齡它打印得到的性別,然後拿到其他的語句後面的語句人名稱,沒有讓我輸入(它似乎只是跳過這一部分),如果我選擇只繼續它將會崩潰計劃跳過輸入和崩潰沒有理由

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void getinfo (char* nam[],int ag[], char gender[], int count){ 
    int y; 
    for(y = 0; y < count; y++){ 
     nam[y] = malloc(30); 
     printf ("What is the student's name?\t"); 
     scanf ("%s", &nam[y]); 
     printf ("\nWhat is the students age?\t"); 
     scanf ("%d", &ag[y]); 
     printf ("\nwhat is the students gender, M/F:\t"); 
     scanf ("%c", &gender[y]); 
    } 
} 

void findeldest (char* nam[],int ag[], char* gender[], int count){ 
    int largest = 0, y, eldest =0 ; 
    for(y = 0; y < count; y++){ 
     if (ag[y] > eldest){ 
      largest = ag[y]; 
      eldest = y; 
     } 
    } 
    printf ("The eldest student is:\t%s", nam[eldest]); 
    printf ("\nGender:\t%c", gender[eldest]); 
    printf ("\nWith an age of:\t%d", ag[eldest]); 
} 

int main(){ 
    int amount, y; 
    printf("How many students are you admitting?\t"); 
    scanf ("%d", &amount); 

    if (amount > 50){ 
     printf("Too many students!"); 
    }else{ 
     char *name[50]; 
     int age[50]; 
     char gender[50]; 
     getinfo(name, age, gender, amount); 
     findeldest(name, age, gender, amount); 
     system("pause"); 
    } 
} 
+2

您是否嘗試過使用調試器?使用一個會給你一個清楚的想法,爲什麼和這個程序崩潰。 – 2013-03-09 06:23:43

回答

0

更換

scanf ("%c", &gender[y]); 

scanf (" %c", &gender[y]); 

而且,findeldest的參數是不正確的。 變化

void findeldest (char* nam[],int ag[], char* gender[], int count){ 

void findeldest (char* nam[],int ag[], char gender[], int count){ 

編輯 變化

scanf ("%s", &nam[y]); 

scanf ("%s", nam[y]); 
+0

它仍然崩潰時,我到達找到最老的funstion – RajayJB 2013-03-09 06:08:53

+0

「它仍然崩潰」太模糊。你會得到什麼錯誤?學會提供有關資料.. – uba 2013-03-09 06:10:35

+0

像描述說,它不給一個理由或交代它只是說節目name.exe已停止工作 – RajayJB 2013-03-09 06:14:46

3

getinfo()功能&在從nam是錯誤的:

scanf ("%s", &nam[y]); 
      ^remove it not need 

scanf ("%s", nam[y]); 

下:第三個參數findeldest()char

void findeldest (char* nam[],int ag[], char* gender[], int count) 
             ^remove * 

void findeldest (char* nam[],int ag[], char gender[], int count) 
+0

工作完全正常,現在感謝 – RajayJB 2013-03-09 06:24:10

+0

@RajayJB好,如果它的工作..你可能會喜歡[點擊接受答案](http://meta.stackexchange.com/questions/5234/how-does -accepting-的回答工作?answertab =#投票製表頂部) – 2013-03-09 15:57:36

0

你必須做如下改變:

1:更改:

void findeldest (char* nam[],int ag[], char* gender[], int count) 

void findeldest (char* nam[],int ag[], char gender[], int count) 

2:更改:

scanf ("%s", &nam[y]); 

scanf ("%s", nam[y]); 

3:更改:

scanf ("%c", &gender[y]); 

scanf ("%c%*c", &gender[y]); 

雖然它能夠更好地使用的getch()。

4:自由分配的內存:

系統( 「暫停」)之前添加以下代碼;

for(int i = 0 ; i < amount ; i++) 
    free(name[i]); 

Add int i; char性別後[50];如果編譯爲c源碼。