2016-09-21 4 views
-3
//o/p when i/p is 16 and 2 is 4 and if variable is int then o/p will be 20; 

#define SETBIT(A,B) A|1<<B 

int main(){ 
    char n,pos; 
    printf("Enter a value"); 
    scanf("%d",&n); 
    printf("Enter position"); 
    scanf("%d",&pos); 
    printf("Value after setting %d",SETBIT(n,pos)); 
} 
+3

'scanf ("% d ", &n);' спецификатор формата не соответствует типу данных, а другой 'scanf' тоже. –

+1

' scanf ("% d", & n) 'с' char n' yields undefined поведение. Аналогично для 'scanf («% d », & pos)'. На практике 'scanf' записывает 4 байта данных в переменную размером 1 байт (хотя эти размеры вообще не продиктованы стандартом языка, это на большинстве платформ) .Вы должны решить, какой тип данных вы хотите сканировать с клавиатуры. С '"% d "' - используйте 'int'. Для' char' - use '"% c "'. –

+0

Пожалуйста, отправьте форматированный код –

ответ

0

Для функций *scanf, спецификатор преобразования d предполагает, что его соответствующий параметр имеет тип int *; если это не так, то это undefined, и в значительной степени любой результат возможен.

Если вы хотите использовать char для pos и n, то вы должны использовать %hhd вместо %d в scanf вызова.

+0

Пока что вывод такой же. – rin92

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