如何打印用户输入的结果?

时间:2013-04-04 15:16:45

标签: c

;在编译器预期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;
}

3 个答案:

答案 0 :(得分:2)

您没有正确使用printf()

它没有神奇地处理任何参数的格式化:你必须告诉它你要发送什么参数,以及你希望它们的值去哪里,使用格式说明符(从{{1}开始) })。

你需要:

%

另请注意,printf("The new ID is %d\n", data1.ID); printf("The name input is '%s'\n", data1.Name); 不应为ID,它需要存储实际的整数,因此它应仅为int *

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

注意:如果您在char Name[100]内声明名称为struct data,则无需malloc

答案 2 :(得分:1)

这里似乎有很多问题。首先,您选择在结构中生成NameID指针。这意味着在开始使用它们之前需要动态分配内存:

struct data data1;
data1.ID = malloc(sizeof(int));
data1.Name = malloc(50); // so arbitrary amount big enough for a name.

我不确定你为什么选择将ID作为一个指针,它不必在这个例子中,如果不是这样的话,它可能会更容易理解;所以考虑改变它。

现在scanf()采用格式字符串,并且每个类型的指针都被读取。在你的情况下,你只是读一个int和一个字符串,所以你有:

scanf("%d",data1.ID);
scanf("%s",data1.Name);

很好,请注意,如果您选择将ID更改为int而不是指针,则需要传递其地址:scanf("%s",&data1.ID);

printf()采用格式字符串,以及要打印的格式的数据。在你的情况下:

printf("The new ID is \n",&data1.ID);  // you're giving the address of the int
printf("The name input is \n",&data1.Name); // and the address of the string

但是你没有提供任何格式......并且你不想发送指针的地址,这没有意义。

printf("The new ID is %d\n",*data1.ID);  // %d for an int, and * to dereference
printf("The name input is %s\n",data1.Name); // %s for a string

你想要做的是相应地使用%d%s作为int和字符串(就像使用scanf()一样)但是因为ID是一个指针,你在将其传递给printf()之前需要取消引用它。 C中没有“字符串”类型,因此当您告诉printf()期望字符串时,它只需要char *,而data1.Name已经是{{1}}。