如何解决如何使用指针在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 举报,一经查实,本站将立刻删除。