#include<stdio.h> #include<string.h> struct book{ float price; char name[50]; }; int main() { int n,i; struct book books[100],*p; printf("输入总共有几本书"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("输入书本的名字和价格"); scanf("%s %f",&books[i].name,&books[i].price); } for(i=1;i<=n;i++) { printf("\n"); printf("%s,%g",books[i].name,books[i].price); } printf("价格最贵书为"); printf("价格最贵书为"); for(i=1;i<=n;i++) { if(p->price<books[i].price) { p=&books[i]; } } printf("\n"); printf("价格最贵书为"); printf("%s,%.g",(*p).name,(*p).price); return 0; }以上代码无法达到预期效果,分析原因
时间: 2024-04-28 07:21:44 浏览: 99
代码中存在一些问题:
1. 在输入书名时,使用%s格式化字符串来读取字符串,但是数组名本身就是一个地址,不需要加取地址符&,应该使用%s %f读取书名和价格。
2. 在for循环中,数组books的下标应该从0开始,因为数组的下标是从0开始的。
3. 在查找价格最贵的书时,需要在循环之前定义一个指向结构体的指针p,并将其初始化为books数组的第一个元素,否则会导致指针未被初始化而引发未知错误。
修改后的代码如下:
相关问题
c语言代码函数名称:findBookByID * 函数功能:按书号检索图书 * 形式参数:p,book型指针,book型一维数组首地址 * 形式参数:num,int型,图书数量 * 形式参数:id,int型,书号 * 返 回 值:返回book型指针。若没有找到图书,则返回空指针NULL;否则,仅返回第1本符合检索条件的图书 */ struct book * findBookByID(struct book *p, int num, int id){ // 请编程实现本函数#include <stdio.h> #include <string.h> typedef struct book{ int id; // 书号 char name[30]; // 书名 char author[30]; //作者 float price; //价格 }BOOK; int main(){ /* 声明函数 */ void input(struct book *p, int num); void output(struct book *p, int num); struct book * findBookByID(struct book *p, int num, int id); struct book * findBookByName(struct book p, int num, char name[]); / 声明变量 */ const int NUM = 3; struct book myBooks[NUM]; struct book *pBook = myBooks; BOOK theBook; / 为myBooks数组的所有元素赋值 / input(pBook, NUM); / 按ID检索图书 / int bookID; scanf("%d", &bookID); fflush(stdin); /清空输入缓冲区/ theBook = findBookByID(pBook, NUM, bookID); /按书号检索/ output(theBook, 1); /输出检索结果/ / 输出myBooks数组的所有元素值 / output(pBook, NUM); return 0; } / *
根据您提供的代码,以下是完整的 C 语言程序:
```
#include <stdio.h>
#include <string.h>
typedef struct book{
int id; // 书号
char name[30]; // 书名
char author[30]; // 作者
float price; // 价格
}BOOK;
/* 按书号检索图书 */
struct book *findBookByID(struct book *p, int num, int id){
for (int i = 0; i < num; i++) {
if (p[i].id == id) {
return &p[i]; // 返回第1本符合检索条件的图书
}
}
return NULL; // 没有找到图书,返回空指针
}
/* 声明函数 */
void input(struct book *p, int num);
void output(struct book *p, int num);
struct book *findBookByName(struct book p, int num, char name[]);
int main(){
const int NUM = 3;
struct book myBooks[NUM];
struct book *pBook = myBooks;
BOOK theBook;
/* 为 myBooks 数组的所有元素赋值 */
input(pBook, NUM);
/* 按 ID 检索图书 */
int bookID;
scanf("%d", &bookID);
fflush(stdin); // 清空输入缓冲区
theBook = *findBookByID(pBook, NUM, bookID); // 按书号检索
output(&theBook, 1); // 输出检索结果
/* 输出 myBooks 数组的所有元素值 */
output(pBook, NUM);
return 0;
}
/* 从键盘输入图书信息 */
void input(struct book *p, int num){
for (int i = 0; i < num; i++) {
printf("请输入第 %d 本书信息:\n", i + 1);
printf("书号:");
scanf("%d", &p[i].id);
fflush(stdin); // 清空输入缓冲区
printf("书名:");
gets(p[i].name);
printf("作者:");
gets(p[i].author);
printf("价格:");
scanf("%f", &p[i].price);
fflush(stdin); // 清空输入缓冲区
}
}
/* 输出图书信息 */
void output(struct book *p, int num){
printf("图书信息如下:\n");
for (int i = 0; i < num; i++) {
printf("书号:%d,书名:%s,作者:%s,价格:%.2f\n", p[i].id, p[i].name, p[i].author, p[i].price);
}
}
/* 按书名检索图书 */
struct book *findBookByName(struct book *p, int num, char name[]){
for (int i = 0; i < num; i++) {
if (strcmp(p[i].name, name) == 0) {
return &p[i]; // 返回第1本符合检索条件的图书
}
}
return NULL; // 没有找到图书,返回空指针
}
```
该程序实现了按书号检索图书的功能,同时还包含了按书名检索图书的函数 `findBookByName`,以及从键盘输入图书信息和输出图书信息的函数 `input` 和 `output`。在 `main` 函数中,用户输入要检索的图书的书号,然后调用 `findBookByID` 函数查找图书并输出检索结果,最后输出所有图书的信息。
c语言代码:#include <stdio.h> #include <string.h> typedef struct book{ int id; // 书号 char name[30]; // 书名 char author[30]; //作者 float price; //价格 }BOOK; int main(){ /* 声明函数 */ void input(struct book *p, int num); void output(struct book *p, int num); struct book * findBookByID(struct book *p, int num, int id); struct book * findBookByName(struct book *p, int num, char name[]); /* 声明变量 */ const int NUM = 3; struct book myBooks[NUM]; struct book *pBook = myBooks; BOOK *theBook; /* 为myBooks数组的所有元素赋值 */ input(pBook, NUM); /* 按ID检索图书 */ int bookID; scanf("%d", &bookID); fflush(stdin); /*清空输入缓冲区*/ theBook = findBookByID(pBook, NUM, bookID); /*按书号检索*/ output(theBook, 1); /*输出检索结果*/ /* 输出myBooks数组的所有元素值 */ output(pBook, NUM); return 0;* * 函数名称:findBookByID * 函数功能:按书号检索图书 * 形式参数:p,book型指针,book型一维数组首地址 * 形式参数:num,int型,图书数量 * 形式参数:id,int型,书号 * 返 回 值:返回book型指针。若没有找到图书,则返回空指针NULL;否则,仅返回第1本符合检索条件的图书 */ struct book * findBookByID(struct book *p, int num, int id){ // 请编程实现本函数
首先我们需要遍历整个书的数组,查找是否有书号与要查找的书号相同的书。如果找到了符合要求的书,就返回该书的指针;否则返回空指针NULL。
具体实现:
```
struct book *findBookByID(struct book *p, int num, int id){
for(int i = 0; i < num; i++){
if(p[i].id == id){
return &p[i];
}
}
return NULL;
}
```
阅读全文