C 打印给定输入时出错
此代码:C 打印给定输入时出错,c,C,此代码: #include<stdio.h> struct my_structure { char name[20]; int number; int rank; }; int main() { int n,i; scanf("%d",&n); struct my_structure variable[n]; struct my_structure *ptr; ptr = &variable; f
#include<stdio.h>
struct my_structure {
char name[20];
int number;
int rank;
};
int main()
{
int n,i;
scanf("%d",&n);
struct my_structure variable[n];
struct my_structure *ptr;
ptr = &variable;
for(i=0; i<n; i++)
{
scanf("%s",ptr->name);
scanf("%d",&ptr->number);
scanf("%d",&ptr->rank);
}
for(i=0; i<n; i++)
{
printf("NAME: %s\n", ptr->name);
printf("NUMBER: %d\n", ptr->number);
printf("RANK: %d", ptr->rank);
}
return 0;
}
#包括
struct my_结构{
字符名[20];
整数;
整数秩;
};
int main()
{
int n,i;
scanf(“%d”和“&n”);
struct my_结构变量[n];
struct my_structure*ptr;
ptr=&变量;
for(i=0;iname);
scanf(“%d”和&ptr->number);
scanf(“%d”,&ptr->rank);
}
for(i=0;iname);
printf(“编号:%d\n”,ptr->NUMBER);
printf(“排名:%d”,ptr->RANK);
}
返回0;
}
它打印不正确。我想先打印第一个输入,然后再打印第二个输入。但是我得到的输出就像只打印第二个输入两次一样。您需要做两个更改:-
ptr = variable ;
然后,您可以在循环中增加ptr
。scanf
的使用并不可靠-如何更好地使用它,请参见答案的末尾
早些时候,赋值中存在类型不匹配。您将struct my\u structure(*)[n]
分配给struct my\u structure*
。检查scanf
的返回值,同时检查n
(n>1)
您也可以在途中完成:(用户代码上的插图)
在启用所有警告的情况下编译程序<代码>gcc-Wall-Werror progname.c
很明显,你甚至不需要使用这个指针-你为什么要这样做?您只需在
scanf
或printf
中使用数组本身即可 大家好,欢迎来到StackOverflow。请参阅关于如何提出适当问题并根据指导原则改进您的问题。@VinothViru:您尝试了什么?请复制我的代码并重新设计,然后发布..我收到了一些建议errors@VinothViru.:答案是保密的,你可以自己做。好的。在哪个循环中我必须使用ptr++…在scanf循环或printf循环中?@VinothViru:您只使用ptr
而不是ptr[i]
或任何东西。买本书。
for(i=0;i<n;i++)
{
scanf("%s",ptr->name);
scanf("%d",&ptr->number);
...
ptr++;
}
..
scanf("%s",ptr[i].name);
scanf("%d",&ptr[i].number);
...
printf("%s",ptr[i].name);
printf("%d",ptr[i].number);
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));
if(scanf("%19s",ptr[i].name) != 1){
/* error in input */
fprintf(stderr,"Error in input\n");
exit(EXIT_FAILURE);
}