c编程,为什么printf不工作?

时间:2015-11-14 06:26:08

标签: c char printf

#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?

enter image description here

1 个答案:

答案 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尝试打印不可打印的控制字符,终端显示空格作为这些控件字符是不可打印的。