2014-11-01 69 views
-1

的代碼是:的scanf(「%d」)正常工作與字符

int main() { 
    scanf("%d"); 
    puts("hello!"); 
    getch(); 
    return 0; 
} 

如果我輸入一個號碼等,程序崩潰,但如果我輸入像ħ一個字符,則程序成功執行。

請您解釋一下背後的原因嗎?
我在Windows XP上使用MinGW。

回答

4

訪問指定%d將不會得到除數字之外的其他字符。

如果你給其他角色的scanf得到執行,並沒有什麼會存儲。

當您給數字字符scanf得到執行並嘗試存儲值。

由於存儲位置不可用,程序崩潰。

嘗試使用在scanf存儲位置像

scanf("%d",&a); 

的每一個版本說警示存儲位置。 因此請嘗試檢查警告。

3
  1. 編譯警告。
  2. 閱讀手冊頁,你會不會認爲scanf("%d");需要一個地址把成數,如果有一個

嘗試

int x; 

scanf("%d", &x); 

你也應該從scanf檢查返回值按手冊頁。我將這一點作爲練習,讓讀者按照他的意願去做。

+0

我知道scanf函數需要一個變量的地址保存輸入。我只是在試驗它。檢查方法的返回值是有幫助的。 – 2014-11-01 07:53:53

0

嘗試

check = scanf("%c %d",&a, &b); 
    printf("check = %d \n",check); 
相關問題