打印给定输入时出错

时间:2018-01-26 07:17:43

标签: c

此代码:

Content-Type

打印不正确。我想先打印第一个输入然后打印第二个输入。但我得到的输出就像只打印第二次输入一样。

1 个答案:

答案 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

显然你甚至不需要使用这个指针 - 你为什么要这样做?您只需在scanfprintf中使用数组本身即可。