實現菜單選擇功能ide
#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; }
項目優化
分析存在的問題:
1.if判斷不少
2.代碼臃腫優化
分析多種優化方案。指針
#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; }
1.switch的基本使用
流程圖:
switch (x) {
case 表達式1:
語句1
break;
case 表達式2:
語句2
break;
case 表達式3:
語句3
break;
default表達式1:
語句1
break;
}
code
demoblog
#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; }
switch: 用於int/char/long/long long 類型的變量,和多個特定常量的判斷處理。
(float和double類型不能夠)
if: 適用於各類邏輯判斷get
#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; }
應修改成:string
#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; }
獨立完成項目8.it
編寫一個程序,讓用戶輸入一個月份,而後判斷這個月有多少天。
假設2月份始終有28天。
分別用if 和switch語句實現。io
讓用戶輸入一個成績,而後判斷該成績的等級。
0-59: 不及格
60-79: 及格
80-89: 良好
90-100: 優秀
其它:非法成績
分別用if 和switch語句實現。class