相比較Java的鍵盤錄入,C語言的scanf有一些需要注意的細節,為了避免使用的時候踩坑,我們就來了解一下scanf,
scanf()是C語言的格式輸入函式,和printf函式一樣被宣告在stdio.h頭檔案中,它的基本使用很簡單:
1 int a; 2 scanf("%d",&a);//程式執行到這里時,就等待用戶輸入;它接收的是變數的地址
//所以一般情況下除了指標型變數和陣列名要給變數加上取地址符&
注意事項一:記憶體溢位(輸入的型別要和占位符一致就不拿出來單獨啰嗦了)
1 char s[1];//長度為1,只能存一個元素 2 printf("請輸入s的值:"); 3 //因為這里使用的是陣列名,陣列名就是地址,所以不用加取地址符& 4 scanf("%s",s); //輸入abcd 5 printf("s=%s\n",s);

誒,照結果來看abcd都被存進字符陣列s里面了,但是我們知道,s是不是只能存一個位元組的資料,所以bcd已經非法占用記憶體了,雖然有時候程式看起來會正常執行,但是它會留下一些隱患,使用的時候需要注意這一點,
注意事項二:錄入多個變數
1 double m,n; 2 printf("請輸入m、n:"); 3 //占位符不寫東西時,錄入的時候默認以空格分隔
//如果占位符用逗號分隔,錄入的時候用逗號分隔 4 scanf("%lf%lf",&m,&n);// scanf("%lf,%lf",&m,&n); 5 printf("n=%lf m=%lf\n",m,n);

如果我將第四行代碼換成注釋的代碼就需要這樣用:

輸入的時候用空格分隔會發生什么呢

可以看到,n的值沒能錄入,建議使用默認的分隔符,占位符中不要自己加東西,
注意事項三:char型別
1 char name[10]=""; 2 int age=0; 3 double sal=0.0; 4 char gender='a';//m代表man w代表woman 5 6 printf("請輸入名字:"); 7 scanf("%s",name);//陣列名,不用加& 8 9 printf("請輸入年齡:"); 10 scanf("%d",&age); 11 12 printf("請輸入薪水:"); 13 scanf("%lf",&sal); 14 15 printf("請輸入性別:"); 16 //scanf中char型別會出現接收上面的回車字符,一個位元組被占了,所以獲取不到錄入的資料 17 scanf("%c",&gender); 18 //所以再接收一次 19 scanf("%c",&gender); 20 21 printf("姓名:%s \n年齡:%d \n薪水:%lf \n性別:%c",name,age,sal,gender);
先看一下去掉19行代碼會發生什么:

亂吧,性別沒法輸入吧;加上19行之后,也就是再獲取一次字符之后:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40832.html
標籤:C
上一篇:排序演算法05------------------------堆排序(圖解)
下一篇:C 實戰練習題目3
