0

わかりました。修正して表示可能(im using codebloks btw)の場合、年齢を入力した後のgetinfo関数で、性別を取得するステートメントを出力し、入力させずに他の人の名前を取得するステートメントを出力します(その部分をスキップしてください)そして私が続行することを選択した場合、それはクラッシュします

#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");
    }
}
4

3 に答える 3

3

からのgetinfo()機能が間違っています:&nam

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

お気に入り

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

次へ:3番目の引数findeldest()char

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

お気に入り

void findeldest (char* nam[],int ag[], char gender[], int count)
于 2013-03-09T06:18:55.027 に答える
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: 割り当てられたメモリを解放します。

system("pause"); の前にこのコードを追加します。

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

int i; を追加します。char 性別 [50] の後; cソースとしてコンパイルする場合。

于 2013-03-09T06:56:23.917 に答える
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]);
于 2013-03-09T05:59:02.637 に答える