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);
}