gpt4 book ai didi

c - 打印给定输入时出错

转载 作者:行者123 更新时间:2023-11-30 20:59:07 24 4
gpt4 key购买 nike

这段代码:

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

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

最佳答案

您需要做的两项更改:-

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_struct (*)[n] 分配给 struct my_struct*。检查 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 字符,这比数组的大小小 1)(正确的方法)

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 中使用数组本身。

关于c - 打印给定输入时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com