#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(&#34; [%c]%d \ n&#34;,op,arr [3]);
为什么不打印%c?
答案 0 :(得分: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
尝试打印不可打印的控制字符,终端显示空格作为这些控件字符是不可打印的。