1、&是取地址符號
&+變量名表示該變量的地址,將從用戶輸入端獲得的數據存儲到該變量的地址中
2、輸入機制
%f、%lf、%d以“空白字符”為間割,空白字符有空格、制表符(\t)、回車符,遇到空白字符停止讀取
%c沒有間隔,逐字符讀取
實驗一:
#include <stdio.h> int main() { int a; printf("請輸入:"); scanf("%d", &a);//輸入100 200,實際只讀取了100 printf("%d\n", a); printf("%d\n", a); return 0; }
注意不能定義兩個變量,結果為:
實驗二:
#include <stdio.h> int main() { char a; printf("請輸入:"); scanf("%c", &a); //輸入100,實際只讀了字符‘1’ printf("%c\n",a); printf("%c\n", a); printf("%d\n", a); //輸出49,字符‘1’的ASCII碼值為49 return 0; }
結果為:
實驗三:
%c不會把空格跳過去
#include <stdio.h> int main() { char a; scanf("%c", &a);//輸入空格+100 printf("a=%c!", a); return 0; }
結果是:
實驗四:
#include <stdio.h> int main() { int a; int b; printf("請輸入:"); //輸入100 200 300,摁下回車 //輸入緩沖區:100 200 300 回車符 scanf("%d", &a); //輸入緩沖區:200 300 回車符 scanf("%d", &b); //輸入緩沖區:300 回車符 printf("%d\n", a); printf("%d\n", b); return 0; }
兩個scanf時,必須定義兩個變量,結果是:
實驗三代碼可以優化成:
#include <stdio.h> int main() { int a; int b; printf("請輸入:"); scanf("%d%d", &a, &b); printf("a=%d,b=%d\n", a, b); return 0; }
應當注意scanf中的兩個%d之間最好不要加任何符號,否則輸入端要以中間的那個符號作為間隔,輸入端如果沒有該符號,就會出現問題
3、定義一個scanf()函數的返回值
當所定義的數據類型與用戶輸入的數據類型不相符時,就會出現問題,輸出的結果不是預期的結果,這時可以定義一個變量來表示成功讀取數據的個數
實驗五:
#include <stdio.h> int main() { int a; int b; int c; int ret; printf("請輸入:"); ret=scanf("%d%d%d", &a,&b,&c); printf("a=%d b=%d c=%d\n", a,b,c); printf("ret=%d\n", ret); return 0; }
當中間的一個數據讀取不成功時,后面的數據都不能成功讀取
實驗六:(代碼同實驗五)
4、double類型的輸入
輸入double類型的值必須用%lf,不能用%f,否則輸入失敗
輸出double類型變量的值可以用%lf,也可以用%f,沒有區別