#include<iostream> #include<string.h> #include<iomanip> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 1000 //图书表可能达到的最大长度 using namespace std; typedef struct {//图书信息定义 char no[20]; //图书ISBN char name[50]; //图书名字 float price; //图书价格 }Book; typedef struct {//图书表的顺序存储结构类型为SqList Book *elem; //存储空间的基地址 int length; //图书表中当前图书个数 }SqList; int InitList_Sq(SqList &L) {//构造一个空的顺序表L L.elem=new Book[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间 if(!L.elem)exit(OVERFLOW); //存储分配失败退出 L.length=0; //空表长度为0 return OK; } int Input_Sq(SqList &L) {//顺序表的输入 /**************begin************/ /**************end************/ } int Output_Sq(SqList L) {//顺序表的输出 /**************begin************/ /**************end************/ } int main() { SqList L; //定义一个SqList类型的变量L InitList_Sq(L); //初始化一个空的顺序表L Input_Sq(L); //输入数据 Output_Sq(L); //输出数据 return 0; }
时间: 2025-05-31 12:52:37 浏览: 16
以下是完善后的 `Input_Sq` 和 `Output_Sq` 函数实现代码,并附带详细解释。
### 完善后的代码
```cpp
#include <iostream>
#include <cstring>
#include <iomanip>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 1000 // 图书表可能达到的最大长度
using namespace std;
typedef struct
{// 图书信息定义
char no[20]; // 图书ISBN
char name[50]; // 图书名字
float price; // 图书价格
} Book;
typedef struct
{// 图书表的顺序存储结构类型为SqList
Book *elem; // 存储空间的基地址
int length; // 图书表中当前图书个数
} SqList;
int InitList_Sq(SqList &L)
{// 构造一个空的顺序表L
L.elem = new Book[MAXSIZE]; // 为顺序表分配一个大小为MAXSIZE的数组空间
if (!L.elem) exit(OVERFLOW); // 存储分配失败退出
L.length = 0; // 空表长度为0
return OK;
}
int Input_Sq(SqList &L)
{// 顺序表的输入
cout << "请输入图书信息(输入 ISBN, 名字, 价格),按 Ctrl+D 结束输入:" << endl;
while (L.length < MAXSIZE)
{
cout << "第 " << L.length + 1 << " 本书籍:" << endl;
cout << "请输入 ISBN: ";
cin >> L.elem[L.length].no;
if (cin.eof()) break; // 检测到 EOF(Ctrl+D)则结束输入
cout << "请输入 名字: ";
cin.ignore(); // 忽略上一行输入的换行符
cin.getline(L.elem[L.length].name, 50);
cout << "请输入 价格: ";
cin >> L.elem[L.length].price;
L.length++;
}
return OK;
}
int Output_Sq(SqList L)
{// 顺序表的输出
if (L.length == 0)
{
cout << "图书表为空,无数据可输出!" << endl;
return ERROR;
}
cout << setw(20) << "ISBN" << setw(50) << "书籍名称" << setw(10) << "价格" << endl;
for (int i = 0; i < L.length; i++)
{
cout << setw(20) << L.elem[i].no
<< setw(50) << L.elem[i].name
<< setw(10) << L.elem[i].price << endl;
}
return OK;
}
int main()
{
SqList L; // 定义一个SqList类型的变量L
InitList_Sq(L); // 初始化一个空的顺序表L
Input_Sq(L); // 输入数据
Output_Sq(L); // 输出数据
return 0;
}
```
---
### 代码解释
#### 1. `Input_Sq` 函数
- **功能**:从用户处接收图书信息并存储到顺序表中。
- **逻辑**:
- 使用 `while` 循环不断读取图书信息,直到达到最大容量或用户输入结束。
- 每次循环中,分别读取 `ISBN`、`名字` 和 `价格`。
- 当检测到用户输入结束信号(如 `Ctrl+D` 或其他终止方式)时,退出循环。
- 每成功输入一本书籍后,将 `length` 增加 1。
#### 2. `Output_Sq` 函数
- **功能**:将顺序表中的所有图书信息格式化输出。
- **逻辑**:
- 如果图书表为空(`length == 0`),提示用户无数据可输出。
- 否则,使用 `for` 循环遍历顺序表中的每一本书籍,并以固定宽度格式化输出其 `ISBN`、`名字` 和 `价格`。
#### 3. 主函数 `main`
- 调用 `InitList_Sq` 初始化顺序表。
- 调用 `Input_Sq` 接收用户输入。
- 调用 `Output_Sq` 输出图书信息。
---
### 示例运行
#### 输入示例:
```
请输入图书信息(输入 ISBN, 名字, 价格),按 Ctrl+D 结束输入:
第 1 本书籍:
请输入 ISBN: 978-7-111-56432-3
请输入 名字: 计算机网络
请输入 价格: 59.8
第 2 本书籍:
请输入 ISBN: 978-7-111-56431-6
请输入 名字: 数据结构与算法分析
请输入 价格: 69.8
^D
```
#### 输出示例:
```
ISBN 书籍名称 价格
978-7-111-56432-3 计算机网络 59.8
978-7-111-56431-6 数据结构与算法分析 69.8
```
---
###
阅读全文
相关推荐















