此代码:
Content-Type
打印不正确。我想先打印第一个输入然后打印第二个输入。但我得到的输出就像只打印第二次输入一样。
答案 0 :(得分:1)
您需要做两件事: -
ptr = variable ;
然后你可以在循环中增加ptr
。(使用scanf
并不健全 - 如何更好地完成它会在答案的最后显示。)
for(i=0;i<n;i++)
{
scanf("%s",ptr->name);
scanf("%d",&ptr->number);
...
ptr++;
}
之后再次执行作业ptr = variable;
。
您也可以这样做(用户代码上的插图)
..
scanf("%s",ptr[i].name);
scanf("%d",&ptr[i].number);
...
printf("%s",ptr[i].name);
printf("%d",ptr[i].number);
之前您的分配类型不匹配。您正在为struct my_structure (*)[n]
分配struct my_structure*
。检查scanf
的返回值,并检查值n
(n>1)
。
您也可以按照以下方式执行此操作:(用户代码上的插图)
struct my_structure (*ptr)[n] = &variable;
for(i=0;i<n;i++)
{
scanf("%s",(*ptr)[i].name);
scanf("%d",&((*ptr)[i].number));
scanf("%d",&((*ptr)[i].rank));
}
...
printf("%s",(*ptr)[i].name);
printf("%d",((*ptr)[i].number));
使用scanf
的正确方法是:-(请注意,此处使用了19
- 否则有可能存在缓冲区溢出 - 并且正在使用此进行检查。这是一个小于由于\0
字符而导致的数组大小(正确方式)
if(scanf("%19s",ptr[i].name) != 1){
/* error in input */
fprintf(stderr,"Error in input\n");
exit(EXIT_FAILURE);
}
使用启用的所有警告编译您的程序。 gcc -Wall -Werror progname.c
。
显然你甚至不需要使用这个指针 - 你为什么要这样做?您只需在scanf
或printf
中使用数组本身即可。