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

C 如何打印用户输入的结果?,c,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

第二;在编译器预期为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;
}
#包括
结构数据
{
int*ID;
字符*名称;
};
内部主(空)
{
结构数据data1;
结构数据*data1Ptr;
data1Ptr=&data1;
printf(“新ID:\n”);
scanf(“%d”,data1.ID);
printf(“名称:\n”);
scanf(“%s”,data1.Name);
printf(“新ID为\n”、&data1.ID);
printf(“输入的名称为\n”,&data1.name);
返回0;
}

您没有正确使用
printf()

它不会神奇地处理任何参数的格式设置:您必须使用格式说明符(从
%
开始)告诉它您要发送的参数以及它们的值要放在哪里

你需要:

printf("The new ID is %d\n", data1.ID);
printf("The name input is '%s'\n", data1.Name);
还要注意的是,
ID
不应该是
int*
,它需要存储一个实际的整数,所以它只能是
int

\include
#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;
}
#包括/*适用于malloc和免费*/ 结构数据 { /*int*ID;为什么是指针*/ int-ID; 字符*名称; }; /*void main()nooo*/ 内部主(空) { 结构数据data1; 结构数据*data1Ptr;/*未使用*/ data1Ptr=&data1; printf(“新ID:\n”); scanf(“%d”,&data1.ID);/*scanf需要一个指针*/ printf(“名称:\n”); /*您必须先为name保留mem*/ data1.Name=malloc(100); /*在这里检查malloc的结果*/ scanf(“%s”,data1.Name); /*printf(“新ID是\n”,data1.ID);您忘记了%d*/ printf(“新ID是%d\n”,data1.ID); /*printf(“输入的名称是\n”,data1.name);您忘记了%s*/ printf(“输入的名称是%s\n”,data1.name); 免费(数据1.名称); 返回0; }

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

,您似乎在这里遇到了许多问题。首先,您选择在结构中创建
Name
ID
指针。这意味着您需要在开始使用它们之前为它们动态分配内存:

struct data data1;
data1.ID = malloc(sizeof(int));
data1.Name = malloc(50); // so arbitrary amount big enough for a name.
我不知道为什么您选择将
ID
作为指针,它不必出现在本例中,如果不是,可能更容易理解;所以考虑改变它。

现在获取一个格式字符串,以及指向正在读取的每种类型的大量指针。在您的例子中,您只是读取一个int和一个字符串,因此您有:

scanf("%d",data1.ID);
scanf("%s",data1.Name);
如果选择将
ID
更改为
int
而不是指针,则需要传递它的地址:
scanf(“%s”和&data1.ID)

获取格式字符串,以及要打印的格式中的数据。就你而言:

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

您想做的是对int和string使用
%d
%s
(与
scanf()
类似),但由于
ID
是指针,因此需要在将其传递到
printf()
之前取消对它的引用。C语言中没有“string”类型,所以当你告诉
printf()
需要一个字符串时,它只需要一个
char*
,这就是
data1.Name
已经是的内容。

我编辑了你的代码,让它更有意义,听起来你对分号很困惑,它只是终止了
struct data
的声明。你在scanf中使用
%d
%s
来读取整数和字符串,你必须在printf中使用这些格式修饰符以及
struct data
需要该指针成员的实体。