#include <stdio.h> #include <stdlib.h> int main() { int a, b, c, d; scanf("%d", &a); //輸入整數並賦值給變量a scanf("%d", &b); //輸入整數並賦值給變量b printf("a+b=%d\n", a+b); //計算a+b的值 scanf("%d %d", &c, &d); //輸入兩個整數並分別賦值給c、d printf("c*d=%d\n", c*d); //計算c*d的值 system("pause"); return 0; }運行結果:
↙
表示按下回車鍵。
從鍵盤輸入12,按下回車鍵,scanf() 就會讀取輸入數據並賦值給變量 a,本次輸入結束,執行下一條語句。接著給變量b賦值,也是同樣的道理。"%d %d"
之間是有空格的,所以輸入數據時也要有空格。也就是說,輸入數據的格式要和控制字符串的格式一致。scanf("%d %d", &a, &b); // 獲取用戶輸入的兩個整數,分別賦值給變量 a 和 b printf("%d %d", a, b); // 將變量 a 和 b 的是在顯示器上輸出。它們都有格式控制字符串,都有變量列表。不同的是,scanf 的變量前要帶一個
&
符號;&稱為取地址符,也就是獲取變量在內存中的地址。int a;
會在內存中分配四個字節的空間,我們將第一個字節的地址稱為變量 a 的地址,也就是&a
的值。對於前面講到的整數、浮點數、字符,都要使用 & 獲取它們的地址,scanf 會根據地址把讀取到的數據寫入內存。#include <stdio.h> #include <stdlib.h> int main() { int a='F'; int b=12; int c=452; printf("&a=%#x, &b=%#x, &c=%#x\n", &a, &b, &c); system("pause"); return 0; }輸出結果:
注意:這裡看到的地址是虛擬地址,並不等於它在物理內存中的地址。虛擬地址是現代計算機因內存管理的需要才提出的概念,我們將在《C語言和內存》專題中詳細講解。再來看一個 scanf 的例子:
#include <stdio.h> #include <stdlib.h> int main() { int a, b, c; scanf("%d %d", &a, &b); printf("a+b=%d\n", a+b); scanf("%d %d", &a, &b); printf("a+b=%d\n", a+b); scanf("%d, %d, %d", &a, &b, &c); printf("a+b+c=%d\n", a+b+c); scanf("%d is bigger than %d", &a, &b); printf("a-b=%d\n", a-b); system("pause"); return 0; }運行結果:
10 20↙ a+b=30 100 200↙ a+b=300 56,45,78↙ a+b+c=179 25 is bigger than 11↙ a-b=14
"%d %d"
,中間有一個空格,而我們卻輸入了10 20
,中間有多個空格。第二個 scanf() 的格式控制字符串為"%d %d"
,中間有多個空格,而我們卻輸入了100 200
,中間只有一個空格。這說明 scanf() 對輸入數據之間的空格的處理比較寬松,並不要求空格數嚴格對應。"%d, %d, %d"
,中間以逗號分隔,所以輸入的整數也要以逗號分隔。is bigger than
分隔。
12 60 10 23↙
a+b=72
c*d=230
#include <stdio.h> #include <stdlib.h> int main() { int a=0, b=0; scanf("a=%d", &a); scanf("b=%d", &b); printf("a=%d, b=%d\n", a, b); system("pause"); return 0; }運行結果:
#include <stdio.h> #include <stdlib.h> int main() { char c; c=getchar(); printf("c='%c'\n", c); system("pause"); return 0; }運行結果:
char c = getchar();
#include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { char c=getche(); printf("c='%c'\n", c); system("pause"); return 0; }運行結果:
#include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { char c=getch(); printf("c='%c'\n", c); system("pause"); return 0; }運行程序,輸入 #,結果為:
從本質上講,getch()、getche() 立即回顯是因為它們不帶緩沖區,而 getchar() 帶有緩沖區,必須等待用戶按下回車鍵才能確認輸入結束,更多內容將在《結合C語言緩沖區談getchar()、getche()、getch()》一節詳細講解。另外需要注意的是:getchar() 位於 stdio.h 頭文件中,是C語言規定的標准函數;而 getche()、getch() 位於 conio.h 中,它們都不是標准函數,不保證在任何編譯器下都有效。
#include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { char str1[30], str2[30]; //定義兩個字符數組 gets(str1); scanf("%s", str2); puts(str1); puts(str2); system("pause"); return 0; }運行結果: