2015-11-14 82 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

谢谢!!,很好的回答 –