2015-11-14 49 views
-3
#include<stdio.h> 

int main(void) { 
    char op; 
    int arr[3]; 
    printf("input "); 
    scanf("%d %c %d", arr,&op,arr+1); 
    arr[3]=arr[0]-arr[1]; //here 
    printf("[%c] %d\n", op, arr[3]); 
    return 0; 
} 

arr [3] = arr [0] -arr 1; printf(「[%c]%d \ n」,op,arr [3]);c編程,爲什麼printf不工作?

爲什麼不打印%c?

enter image description here

+1

請在獲得答案後不要更改代碼,以便答案無效。最好將輸出以文本格式作爲代碼發佈,而不是張貼屏幕截圖。 –

+0

[Scanf語句]的可能重複(http://stackoverflow.com/questions/15861077/scanf-statement) – hagello

+0

@hagello不。它不是那個的重複。 –

回答

5

此:

arr[3]=arr[0]-arr[1]; 
printf("[%c] %d\n", op, arr[3]); 

應該

arr[2] = arr[0] - arr[1]; 
printf("[%c], %d\n", op, arr[2]); 

因爲數組下標從0和結束長度開始 - 1.使用arr[3]導致不確定的行爲,你訪問內存你不應該的位置。

在你的情況下,arr[3]可能是op。因此,在您給出的示例中,op的值分別更改爲2和1,因此,printf會嘗試打印不可打印的控制字符,並且終端將顯示空格,因爲這些控制字符不可打印。

+0

謝謝!!,很好的回答 –