目录
代码展示
2021/9/20 22:45 第一次更新
- 发现问题:如果输入字符,会一直重复弹出菜单和“错误指令”。
- 问题原因:输入字符,scanf("%d",option); 读不到输入缓冲区内容。因为option默认初始化为0,后续的switch中,0对应了“错误指令”。进入死循环。
- 进入死循环的原因: 当 scanf()变换失败的时候(比如,尽管你指定了%d,但是输入的却是英文字符),scanf()会将导致失败的部分遗留在流中。——《征服C指针》
- 解决方案:在输出“错误指令”后,用 fflush(stdin); 清除输入缓冲区。
#include<stdio.h>
#include <stdlib.h>
void menu();
void select();
int main(){
int option;
do{
menu();
scanf("%d",&option);
switch(option){
case 1:
select();
break;
case 2:
printf("添加\n");
break;
case 3:
printf("修改\n");
break;
case 4:
printf("删除\n");
break;
case 5:
printf("查询\n");
break;
case 6:
printf("退出\n");
break;
default:
printf("错误指令\n");
fflush(stdin); // 这里避免进入死循环输出"错误指令"
}
}while(option != 6);
return 0;
}
void menu(){
printf("\n\n\n\n");
printf("\t\t\t\t-----------电话本-----------\n");
printf("\t\t\t\t*******查看 联系人(1)*******\n");
printf("\t\t\t\t*******添加 联系人(2)*******\n");
printf("\t\t\t\t*******修改 联系人(3)*******\n");
printf("\t\t\t\t*******删除 联系人(4)*******\n");
printf("\t\t\t\t*******查询 联系人(5)*******\n");
printf("\t\t\t\t*******退 出 程 序(6)*******\n");
printf("\n\n\n\n");
}
void select(){
system("cls");
fflush(stdin);
printf("查看\n");
system("pause");
system("cls");
fflush(stdin);
}
2021/9/25 17:30 第二次更新
- 写了个Demo,结构体数组来存储数据。完成了简单的 增删改查、文件读写。
- 文件读写部分代码参考:C语言文件读写(结构体文件)_weixin_34258078的博客-CSDN博客
#include<stdio.h>
#include<string.h>
#include <sys/types.h>
#include <sys/stat.h>
#define Len 5
int n = 0; // 有几行数据
typedef struct node{
char name[20];
int num;
}Node;
void show(Node a[],int len); // 展示数组
void intailize(Node a[],int len); // 数组初始化
void add(Node a[],int len); // 添加
void del(Node a[],int len);// 删除
void mod(Node a[],int len);// 修改
void sea(Node a[],int len);// 查找
void Write(Node nodes[],int len); // 写文件
void Read(Node nodes[]); // 读文件
int main(){
// 定义数组,初始化
Node a[Len];
intailize(a,Len);
Read(a);
// //录入信息
// for(int i = 0; i < Len - 1;i++){
// add(a,Len);
// }
show(a,Len);
//Write(a,Len);

&spm=1001.2101.3001.5002&articleId=120396551&d=1&t=3&u=c574f332f8834d88be417df0ce452d77)
2258

被折叠的 条评论
为什么被折叠?



