爲什麼會單獨將字符串的輸入拿出來講,因爲字符串和其他的輸入來說有一點不同,在C語言中,從鍵盤輸入有多個函數
- scanf:和 printf()類似,scanf()可以輸入多種類型的數據。
- getchar()、getche()、getch():這三個函數用於輸入單個字符。
- gets():獲取一行數據,作爲字符串處理
scanf 函數
1 #include <stdio.h>
2 #include <string.h>
3 void sum();
4 void sub();
5
6 void sum()
7 {
8 int sum,a,b,c;
9 printf("請輸入第一個數\r\n");
10 scanf("%d",&a);
11 printf("請輸入第二個數\r\n");
12 scanf("%d",&b);
13 sum=a+b;
14 printf("相加的值爲%d\r\n",sum);
c=getchar();
15 }
16 void sub()
17 {
18 char arr[]={'z','h','a','n','g'};
19 char arr1[]="zhang";
20 long la=sizeof(arr);
21 long la1=sizeof(arr1);
22 printf("%ld,%ld\r\n",la,la1);
23 }
24
25 int main()
26 {
27 char choose;
28 while(1)
29 {
30 printf("*************************************************\r\n");
31 printf(" 歡迎來到個性化計算器\r\n");
32 printf(" 請根據提示選擇相應的操作\r\n");
33 printf(" 1:加法 2:減法 3:乘法 4:除法 5:取模\r\n");
34 printf(" 請輸入您的計算法則\r\n");
35 printf("*************************************************\r\n");
36
37 scanf("%c",&choose);
38 switch(choose)
39 {
40 case '1':
41 printf("加法運算\r\n");
42 sum();
43 break;
44 case '2':
45 printf("減法運算\r\n");
46 sub();
47 break;
48 case '3':
49 printf("乘法運算\r\n");
50 break;
51 case '4':
52 printf("除法運算\r\n");
53 break;
54 case '5':
55 printf("取模運算\r\n");
56 break;
57 case '0':
58 printf("程序將在3秒後退出\r\n");
59 sleep(3);
60 return 0;
61 default:
62 printf("輸入數據不合法,請重新輸入\r\n");
63 break;
64 }
65 }
66 return 0;
67 }
結果:
這裏問題就在於我想要的是輸入1之後,進行加法運算,然後回到選擇界面,可這裏在進行完之後在我們意料之外輸出default的語句。這就是因爲輸入緩衝區的問題。因爲我們使用%c輸入,識別到的是兩個字符‘1’,‘\n’,所以在我們進行第一次case之後會自動再進行一次default運算。
解決的方法就是:
1. 將char類型改爲int;
2. 清空緩衝區,在linux下fflush()不能清空緩衝區,此時,我們選擇回收字符就可以解決這個問題;有時候我們可以結合while進行使用;