如何使用指针在C中填写结构数组?

如何解决如何使用指针在C中填写结构数组?

我试图打印出用户为餐厅评论输入的详细信息,我希望它打印出多个的详细信息,但我的代码只打印最后一个条目。

以下是输入示例:

Enter Number of reviews: 2  
Enter Your Name: Bob  
Enter Name of restaurant: Ramon Ramen Shoo  
Enter address of restaurant: #15 Orange Gold Street  
Enter phone number: 19178089323  
Enter score: 70  

Enter Your Name: Bill  
Enter Name of restaurant: McDonalds  
Enter address of restaurant: #7 Goldy Street  
Enter phone number: 19132089323  
Enter score: 4   

我希望它打印出两个评论的详细信息,但只重复打印最后一个条目,而不是打印条目 1 和条目 2 的详细信息。

这是我的代码

#include <stdio.h>
#include <string.h>
#define MAX_REVIEWS 1000000
#define MAX_SIZE 1024
typedef struct Review{
    char reviewer_name[MAX_SIZE];
    char restaurant_name[MAX_SIZE];
    char restaurant_address[MAX_SIZE];
    char phone[10];
    int score;
}review;
void fill_out_review(review *rp){
    printf("Enter your name: ");
    fgets(rp -> reviewer_name,1024,stdin);

    printf("Enter name of restaurant: ");
    fgets(rp -> restaurant_name,stdin);

    printf("Enter address of restaurant: ");
    fgets(rp -> restaurant_address,stdin);

    printf("Enter Phone Number: ");
    fgets(rp -> phone,11,stdin);

    printf("Enter score: ");
    scanf("%d",&rp -> score);
    getchar();

    rp++;
}

void print_details(review *rp){
    printf("\n\nName of reviewer: %s\n",rp -> reviewer_name);
    printf("Name of restaurant: %s\n",rp -> restaurant_name);
    printf("Address of restaurant: %s\n",rp -> restaurant_address);
    printf("Phone Number: %s\n",rp -> phone);
    if(rp -> score > 100 || rp -> score < 0 ){
        printf("Error: INVALID score!");
    }
    else{
        printf("score: %d\n",rp -> score);
    }
    rp++;

}
int main(){
    //review rev1[MAX_REVIEWS] = {{{0},{0},0}};
    review rev1;
    review *ptr = NULL;
    ptr = &rev1;
    int num_reviews;

    printf("Enter Number of reviews: ");
    scanf("%d",&num_reviews);
    getchar();

    for(int i = 0; i < num_reviews; i++){
        fill_out_review(ptr);

        //ptr++;
    }
    ptr = &rev1;

    for(int i = 0; i < num_reviews; i++){
        printf("\n\nDetails of review %d:",(i+1));
        print_details(ptr);

        //ptr++;
    }





}

解决方法

您正在使用指针进行覆盖,您只需定义一个指针数组即可完成此操作。

int num_reviews;
printf("Enter Number of reviews: ");
scanf("%d",&num_reviews);

review *ptr=malloc(sizeof(review)*num_reviews);//dynamically pointer array.
review *first=ptr;//take the beginning address.
getchar();

for(int i = 0; i < num_reviews; i++){
    fill_out_review(ptr);
    ptr++;
}
   
ptr=first; //to print all elements,back to the first element.
for(int i = 0; i < num_reviews; i++){
    printf("\n\nDetails of review %d:",(i+1));
    print_details(ptr);
    ptr++;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?