-4

; void がコンパイラによって予期される前。私の本当の質問は次のとおりです。IDと名前を入力できましたが、printfで表示できません。私のデータがポインタに記録されていなかったからですか?問題を解決するには?

#include <stdio.h>
struct data 
{
 int* ID;
 char* Name;
};

int main(void)
{
    struct data data1;
    struct data *data1Ptr;
    data1Ptr = &data1;
    printf("New ID:\n");
    scanf("%d",data1.ID);
    printf("Name:\n");
    scanf("%s",data1.Name);
    printf("The new ID is \n",&data1.ID);
    printf("The name input is \n",&data1.Name);

    return 0;
}
4

3 に答える 3

2

printf()正しく使用していません。

引数の書式設定を魔法のように処理するわけではありません。書式指定子 ( で始まる) を使用して、送信する引数とその値をどこに送信するか%を指定する必要があります。

必要なもの:

printf("The new ID is %d\n", data1.ID);
printf("The name input is '%s'\n", data1.Name);

また、実際の整数を格納する必要があるため、そうIDすべきではないことに注意してください。int *int

于 2013-04-04T15:19:34.410 に答える
2
#include <stdio.h>
#include <stdlib.h> /* for malloc and free */

struct data 
{
    /*int* ID; why a pointer? */
    int ID;
    char *Name;
};

/* void main() Noooo */
int main(void)
{
    struct data data1;
    struct data *data1Ptr; /* unused */

    data1Ptr = &data1;
    printf("New ID:\n");
    scanf("%d", &data1.ID); /* scanf expects a pointer */
    printf("Name:\n");
    /* you have to reserve mem for name before */
    data1.Name = malloc(100);
    /* check result of malloc here */
    scanf("%s",data1.Name);
    /*printf("The new ID is \n",data1.ID); You forget %d */
    printf("The new ID is %d\n",data1.ID);
    /* printf("The name input is \n",data1.Name); You forget %s */
    printf("The name input is %s\n",data1.Name);
    free(data1.Name);
    return 0;
}

注: Name をchar Name[100]内部として宣言する場合struct data、必要はありません。malloc

于 2013-04-04T15:28:28.923 に答える