程序跳过输入和崩溃没有理由

时间:2013-03-09 05:49:15

标签: c function codeblocks

好吧所以如果修好它并且我可以表现出来(我使用codebloks btw),在输入age之后的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");
    }
}

3 个答案:

答案 0 :(得分:3)

来自getinfo()的{​​{1}}函数&错误:

nam

喜欢

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

next:scanf ("%s", nam[y]); 的第三个参数应为findeldest()

char

喜欢

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

答案 1 :(得分: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]);

答案 2 :(得分: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] );

添加int i;在char性别之后[50];如果编译为c源。