实现菜单选择功能
#include <stdio.h>
#include <string.h>
int main(void) {
//定义变量,用来表示用户名和密码
char name[32];
char password[16];
FILE *file; //定义了一个文件指针变量,变量名是file
char line[128];
char name_tmp[32];
char password_tmp[16];
char *ret;
char n; //用户选择的菜单编号
//打开文件
file = fopen("users.txt", "r");
if (!file) { //等效于 file == NULL
printf("文件打开失败");
return 1;
}
//输入用户名和密码
while (1) {
system("cls");
//输入用户名和密码
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", password);
//从文件中读取账号,并进行判断!
while (1) {
//读一行
ret = fgets(line, sizeof(line), file); //line: "admin 123456\n"
if (!ret) {
break;
}
sscanf(line, "%s %s", name_tmp, password_tmp);
if (!strcmp(name, name_tmp) && !strcmp(password, password_tmp)) {
break;
}
}
if (ret) { //用户名和密码匹配成功
break;
} else {
printf("用户名或密码错误!\n");
system("pause");
system("cls");
fseek(file, 0, SEEK_SET); //把文件内部的位置指针设置到文件头
}
}
while (1) {
system("cls");
//打印功能菜单
printf("---交换机后台管理---\n");
printf("1.创建账号\n");
printf("2. IP管理\n");
printf("3.退出\n");
printf("请选择: ");
fflush(stdin);
scanf("%c", &n);
if (n == '1') {
system("cls");
printf("\n\n---创建账号---\n\n");
printf("待实现...\n\n");
printf("\n\n按任意键返回主菜单");
fflush(stdin);
getchar();
} else if (n == '2') {
system("cls");
printf("\n\n---IP管理---\n\n");
printf("待实现...\n\n");
printf("\n\n按任意键返回主菜单");
fflush(stdin);
getchar();
} else if (n == '3') {
system("cls");
break;
} else {
system("cls");
printf("\n\n输入错误!\n\n");
printf("\n\n按任意键后,请重新输入\n\n");
fflush(stdin);
getchar();
}
}
return 0;
}
项目优化
分析存在的问题:
[if !supportLists]1. [endif]if判断很多
[if !supportLists]2. [endif]代码臃肿
分析多种优化方案。
#include <stdio.h>
#include <string.h>
int main(void) {
//定义变量,用来表示用户名和密码
char name[32];
char password[16];
FILE *file; //定义了一个文件指针变量,变量名是file
char line[128];
char name_tmp[32];
char password_tmp[16];
char *ret;
char n; //用户选择的菜单编号
//打开文件
file = fopen("users.txt", "r");
if (!file) { //等效于 file == NULL
printf("文件打开失败");
return 1;
}
//输入用户名和密码
while (1) {
system("cls");
//输入用户名和密码
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", password);
//从文件中读取账号,并进行判断!
while (1) {
//读一行
ret = fgets(line, sizeof(line), file); //line: "admin 123456\n"
if (!ret) {
break;
}
sscanf(line, "%s %s", name_tmp, password_tmp);
if (!strcmp(name, name_tmp) && !strcmp(password, password_tmp)) {
break;
}
}
if (ret) { //用户名和密码匹配成功
break;
} else {
printf("用户名或密码错误!\n");
system("pause");
system("cls");
fseek(file, 0, SEEK_SET); //把文件内部的位置指针设置到文件头
}
}
while (1) {
system("cls");
//打印功能菜单
printf("---交换机后台管理---\n");
printf("1.创建账号\n");
printf("2. IP管理\n");
printf("3.退出\n");
printf("请选择: ");
fflush(stdin);
scanf("%c", &n);
switch (n) {
case '1':
system("cls");
printf("\n\n---创建账号---\n\n");
printf("待实现...\n\n");
printf("\n\n按任意键返回主菜单");
fflush(stdin);
getchar();
break;
case '2':
system("cls");
printf("\n\n---IP管理---\n\n");
printf("待实现...\n\n");
printf("\n\n按任意键返回主菜单");
fflush(stdin);
getchar();
break;
case '3':
system("cls");
return 0;
default:
system("cls");
printf("\n\n输入错误!\n\n");
printf("\n\n按任意键后,请重新输入\n\n");
fflush(stdin);
getchar();
break;
}
}
return 0;
}
项目精讲
[if !supportLists]1. [endif]switch的基本使用
流程图:
switch (x) {
case表达式1:
语句1
break;
case表达式2:
语句2
break;
case表达式3:
语句3
break;
default表达式1:
语句1
break;
}
demo
#include <stdio.h>
int main(void) {
int x;
x = 1;
switch(x) {
case 1:
printf("1\n");
case 2:
printf("2\n");
case 3:
printf("3\n");
default:
printf("default\n");
}
return 0;
}
[if !supportLists]2. [endif]switch和if的选择
switch: 用于int/char/long/long long 类型的变量,和多个特定常量的判断处理。
(float和double类型不可以)
if:适用于各种逻辑判断
[if !supportLists]3. [endif]switch的注意事项
#include <stdio.h>
int main(void) {
int c;
scanf("%d", &c);
switch(c) {
case 1:
int x = 0; //错误!
printf("c=1\n");
break;
case 2:
printf("c=2\n");
break;
default:
printf("other\n");
break;
}
return 0;
}
应该修改为:
#include <stdio.h>
int main(void) {
int c;
scanf("%d", &c);
switch(c) {
case 1:
{
int x = 0; //合法
}
printf("c=1\n");
break;
case 2:
printf("c=2\n");
break;
default:
printf("other\n");
break;
}
return 0;
}
项目练习
练习1
独立完成项目8.
练习2
编写一个程序,让用户输入一个月份,然后判断这个月有多少天。
假设2月份始终有28天。
分别用if和switch语句实现。
练习3
让用户输入一个成绩,然后判断该成绩的等级。
0-59:不及格
60-79:及格
80-89:良好
90-100:优秀
其它:非法成绩
分别用if和switch语句实现。
网友评论