一 基本用法
scanf函數:接收用戶的輸入
語法:
scanf("格式化控制符",地址列表);
例:
int num;
scanf("%d",&num);//代表接收用戶輸入一個整數,把這個整數賦值到num所在的空間
如果要接收字符呢???
char ch;
scanf("%c",&ch);
tips:千萬要記住:scanf的格式化控制符后面不要加\n
scanf函數有一個特點:它叫阻塞式函數
意思就是:當程序執行到它這一句的時候,會暫時停止,不會繼續往下執行,直到用戶輸入完才會繼續往下執行
二 詳解
盡量在讓用戶輸入給一個提示
printf補充:可以同時挖N個坑(同時在內存中開辟N個空間),但是你給的值的順序必須一致,而且類型也必須一致
1、也可以同時輸入兩個整數,分別輸入兩次就行了,或者用空格隔開
2、scanf里面的格式化控制符也可以用其他符號隔開,但是不管你用什么格式,輸入的時候必須以你的那個格式來輸入,否則會輸入異常
3、最好不要先接收輸入任何一個類型的數據后,立即再接收輸入一個字符
4、最好不要把字符型和其他類型放在一起輸入(tips:為什么呢?請看下面的運行原理)
三 運行原理
首先,scanf在內存中有個位置,叫緩沖區,里面是保存所有用戶輸入的數據的
用scanf接收用戶輸入的時候:
1.先去緩沖區里面找有沒有合適的數據,如果有,則直接把緩沖區的這個數據賦值給你的變量(意味着不要用戶輸入了)
2.如果沒有,才會讓用戶進行輸入,輸入以后,數據先放在緩沖區
3.然后再從這個緩沖區里面找數據
tips:如果要接收的是數字,但是輸入的是字符,那么會忽略(不給那個變量賦值)
以后如果要接收一個字符的話,一定要記得在前面加空格(tips:會過濾掉所有的空格和回車)
tips:代碼例子如下
#include <stdio.h>
int main(int argc, const char * argv[]) {
/*
int num1;
scanf("%d",&num1);
char ch;
scanf("%c",&ch);
printf("num1=%d ch=%c\n",num1,ch);
*/
/*
int num;
char ch;
scanf("%d%c",&num,&ch);//會讓用戶輸入,依次輸入200空格a回車
printf("num=%d ch=%c\n",num,ch);//num=200 a=空格
char ch2;
scanf("%c",&ch2);//不會讓用戶輸入
printf("ch2=%c\n",ch2);//ch2里保存的是a
char ch3;
scanf("%c",&ch3);//不會讓用戶輸入
printf("ch3=%c\n",ch3);//ch3里面保存的是回車
*/
/*
char ch;
scanf("%c",&ch);//輸入完以后a,a,2,0
int num;
scanf("%d",&num);//這里還會讓我繼續輸入,因為上面緩沖區留下來的\n和int類型不符合,所以會讓我輸入
printf("ch=%c num=%d\n",ch,num);
*/
// int num = 200;
// scanf("%d",&num);//如果輸入的是字母,直接忽略
//
// printf("num=%d\n",num);
/*
char ch;
scanf("%c",&ch); //aa20
int num = 200;
scanf("%d",&num);
char ch2;
scanf("%c",&ch2);
printf("ch=%c num=%d ch2=%c\n",ch,num,ch2);//a 200 a
*/
/*
int num;
scanf("%d",&num);
char ch;
scanf("%c",&ch);//如果接收字符的話,很容易吸收掉上一次輸入的空格或者回車,那么要解決這個問題怎么辦???
printf("num=%d ch=%c\n",num,ch);
*/
//解決辦法一:
/*
int num;
scanf("%d",&num);
char temp;
scanf("%c",&temp);//幫我們吸收掉回車了
char ch;
scanf("%c",&ch);//如果接收字符的話,很容易吸收掉上一次輸入的空格或者回車,那么要解決這個問題怎么辦???
printf("num=%d ch=%c\n",num,ch);
*/
//解決辦法二
// int num;
// scanf("%d",&num);
//
// char ch;
// scanf(" %c",&ch);//會自動過濾掉所有的空格和回車
//
// printf("num=%d ch=%c\n",num,ch);
//解決辦法三(推薦方法)
// int num;
// scanf("%d",&num);
//
// rewind(stdin); //自動幫助我們清空緩沖區的數據
// char ch;
// scanf("%c",&ch);
//
// printf("num=%d ch=%c\n",num,ch);
return 0;
}
