1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int menu() //選擇菜單 5 { 6 int result; 7 printf("**********請選擇:***********\n"); 8 printf("**********1.插入:***********\n"); 9 printf("**********2.刪除:***********\n"); 10 printf("**********3.遍歷:***********\n"); 11 12 result = get_int(); 13 while(result > 6 || result < 1) 14 { 15 printf("請輸入1-3!\n"); 16 result = get_int(); 17 } 18 return result; 19 } 20 21 int get_int() //得到整型(不完善) 22 { 23 int input; 24 char ch; 25 while(scanf("%d",&input) != 1) 26 { 27 while((ch = getchar()) != '\n'); 28 printf("輸入格式不對,請重新輸入!\n"); 29 } 30 getchar(); 31 return input; 32 33 } 34 35 char get_first() //得到第一個字符(不完善) 36 { 37 char c,ch; 38 scanf("%c",&c); 39 while(getchar() != '\n') 40 continue; 41 42 return c; 43 } 44 45 46 int get_int() //完善版 47 { 48 int value; 49 while(scanf("%d",&value) != 1) 50 { 51 while(getchar() != '\n'); 52 printf("格式不對,請重新輸入!\n");
53 } 54 while(getchar() != '\n'); 55 return value; 56 } 57 58 char get_first() //完善版 59 { 60 char value; 61 scanf("%c",&value); 62 while(value == '\n' || value == 32) //value不能等于換行符和空格符 63 { 64 scanf("%c",&value);
while(getchar() != '\n'); 65 } 66 while(getchar() != '\n'); //截掉多余的字符串 67 return value; 68 } 69 70 71 int main(void) 72 { 73 do 74 { 75 switch(menu()) 76 { 77 case 1: printf("1\n");break; 78 case 2: printf("2\n");break; 79 case 3: printf("3\n");break; 80 } 81 do 82 { 83 printf("是否要繼續操作?(y/n)"); 84 ch = get_first(); 85 }while(ch != 'y' && ch != 'Y' && ch != 'n' && ch != 'N'); 86 }while(ch == 'y' || ch == 'Y'); 87 88 }
? 本文主要介紹菜單功能,有主函數,menu()菜單函數,getfirst()獲取字符函數,getint()獲取整數函數,四個函數構成;主函數和menu()函數自不必說,主要是getfitst()函數和getint()函數;
getfirst()函數的功能是獲取第一個輸入的字符;我們首先要做的就是先獲取用戶輸入的字符,然后判斷用戶輸入的字符是否為換行或者是空格(根據自己的需要隨意添加條件),如果符合括號的條件則把用戶輸入的剩余字符串截取掉,當最后一個字符為'\n'為止。然后重新獲取用戶輸入的字符串,再進行判斷;這樣做的好處就是防止用戶在上一個輸入函數中沒有處理好'\n'的現象。如果上一個輸入是scanf("%d",&value);然后用戶輸入一個5之后按下回車進行下一個輸入。而此時如果跳到getfirst()函數中,則第一個接收的字符串就是'\n',而不是之后用戶想要輸入的那個字符了。因此在這里我們需要對用戶輸入的字符進行判斷,做適當的截取字符串工作,把此次用戶輸入的'\n'給截取掉;
getint()函數的功能是獲得一個int型整數,此函數的思想和getfirst()函數差不多,有一點需要解釋的是scanf()函數,大家似乎都在用scanf()函數做數據的輸入,但是scanf()還有一個功能就是具有返回值。如果輸入的格式和scanf()函數定義的格式一樣的話,就會返回1。