0

好的,所以如果修复它并且我可以展示它(我正在使用 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

在from ofgetinfo()函数中是错误的:&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)
于 2013-03-09T06:18:55.027 回答
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 回答
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; 字符后性别[50];如果编译为 c 源代码。

于 2013-03-09T06:56:23.917 回答