0

さて、ここでの私の目標は、関数を使用して文字列の配列を設定し、次にそれらの文字列の配列を返すことです。

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

int getinfo (char* nam[], int ag[], char* dot[], char* gende[], int x)
{
    printf ("What is the student's name?\t");
    scanf ("%d", &nam[x]);
    printf ("\nWhat is the student's age?\t");
    scanf ("%d", &ag[x]);
    printf ("\nWhat is the student's Date of Birth?\t");
    scanf ("%s", &dot[x]);
    printf ("\nWhat is the student's gender?\t");
    scanf ("%c", &gende[x]);
    printf ("\nWhat is the student's adress?\t");
    return nam[x];
}

int main ()
{
    int amount, y;
    printf("How many students are you admitting?\t");
    scanf ("%d", &amount);
    char *name[50], *dob[50], gender[50];
    int age[50];

    for(y = 0; y < amount; y++)
    {
        getinfo(&name[y], &age[y], &dob[y], &gender[y],y);
    }
    system("pause");
}
4

3 に答える 3

0

これを試して:

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

typedef char string[50];

void getinfo(char *nam, int *ag, char *dot, char *gende){
    printf ("What is the student's name?\t");
    scanf("%s", nam);

    printf ("\nWhat is the student's age?\t");
    scanf("%d", ag);

    printf ("\nWhat is the student's Date of Birth?\t");
    scanf("%s", dot);

    printf ("\nWhat is the student's gender?\t");
    scanf("%s", gende);

}

int main(){

    int
        amount,
        *age,
        y;

    string
        *name,
        *dob,
        *gender;

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

    name    = (string *)malloc(sizeof(string));
    dob     = (string *)malloc(sizeof(string));
    gender  = (string *)malloc(sizeof(string));
    age     = (int *)malloc(sizeof(int));

    for(y = 0; y < amount; ++y)
        getinfo(name[y], &age[y], dob[y], gender[y]);

    system("pause");

}

あなたが行ったことと比較し、そこから学ぶようにしてください。

于 2013-03-09T02:05:05.093 に答える
0

いくつかのこと:

  • chars ではなくs を gende に読み取っchar*ているので、引数リストでそれを修正する必要があります。

  • fornameとでは、文字列へのポインターdotを含む配列のみを宣言しています。また、文字列を格納するためにメモリを割り当てる必要があります。以下のコードでは、各文字列に 50 文字が割り当てられています。

scanfまた、以下のコードはバッファ オーバーフローに対して非常に脆弱であるため、文字列の読み取りには を使用しないことをお勧めします。ユーザーが 50 文字を超えて入力するのを妨げるものは何もありません。http://c-faq.com/stdio/scanfprobs.htmlを参照してください。

とにかく、最小限の変更を加えたコードを次に示します。

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

int getinfo (char* nam[], int ag[], char* dot[], char gende[], int x)
{
    printf ("What is the student's name?\t");
    scanf ("%d", &nam[x]);
    printf ("\nWhat is the student's age?\t");
    scanf ("%d", &ag[x]);
    printf ("\nWhat is the student's Date of Birth?\t");
    scanf ("%s", &dot[x]);
    printf ("\nWhat is the student's gender?\t");
    scanf ("%c", &gende[x]);
    printf ("\nWhat is the student's adress?\t");
    return nam[x];
}

int main ()
{
    int amount, y;
    printf("How many students are you admitting?\t");
    scanf ("%d", &amount);
    char *name[50], *dob[50], gender[50];
    int age[50];

    for(y = 0; y < amount; y++)
    {
        name[y] = malloc(50);
        dob[y] = malloc(50);
    }

    for(y = 0; y < amount; y++)
    {
        getinfo(&name[y], &age[y], &dob[y], &gender[y],y);
    }
    system("pause");
}
于 2013-03-09T02:44:14.747 に答える