2015-11-14 2 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 statement] (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

Спасибо, отличный ответ –

Смежные вопросы