以下のようなk番目のビットを返却するプログラムを作成してcygwinで実行しようとしたのですが、コンパイルと実行を行うまではできるのですが、
以下のようなk番目のビットを返却するプログラムを作成してcygwinで実行しようとしたのですが、コンパイルと実行を行うまではできるのですが、 その実行結果が下に書いてあるように整数を入力したところで止まってしまいます。どうしたらよいのでしょうか。 プログラム #include<stdio.h> int get_flag(unsigned char n,int k); //unsigned char set_flag(unsigned char n,int k); //unsigned char unset_flag(unsigned char n,int k); int main(void){ int bit_num; //0以上7以下 unsigned char num; //0以上255以下 do{ printf("整数(0~255):"); scanf("%s\n",&num); }while(num<0||num>255); do{ printf("何番目?(0~7):"); scanf("%d\n",&bit_num); }while(bit_num<0||bit_num>7); printf("k番目のビットは%dです。\n",get_flag(num,bit_num)); //printf("k番目のビットを1に変更した整数は%dです。\n",set_flag(num,bit_num)); //printf("k番目のビットを0に変更した整数は%dです。\n",unset_flag(num,bit_num)); return 0; } int get_flag(unsigned char n,int k){ int bit; bit=((n>>7)<<7)>>k; return bit; } 実行結果 name@DESKTOP-EK5AH1R ~/x $ gcc -Wall n05kd01.c -o n05kd01 name@DESKTOP-EK5AH1R ~/x $ ./n05kd01.exe 整数(0~255):200
ベストアンサー
(yhiさん) scanf("%s\n",&num); ↓ scanf("%d",&num); scanf("%d\n",&bit_num); ↓ scanf("%d",&bit_num); bit=((n>>7)<<7)>>k; ↓ bit=(n>>k)&0x1; ~~~~~~~~~~~~~~~~~~~~~~~~~ #include<stdio.h> int get_flag(unsigned char n, int k); //unsigned char set_flag(unsigned char n,int k); //unsigned char unset_flag(unsigned char n,int k); int main(void) { int bit_num; //0以上7以下 unsigned char num; //0以上255以下 do { printf("整数(0~255):"); scanf("%d", &num); } while(num<0||num>255); do { printf("何番目?(0~7):"); scanf("%d", &bit_num); } while(bit_num<0||bit_num>7); printf("k番目のビットは%dです。\n", get_flag(num, bit_num)); //printf("k番目のビットを1に変更した整数は%dです。\n",set_flag(num,bit_num)); //printf("k番目のビットを0に変更した整数は%dです。\n",unset_flag(num,bit_num)); return 0; } int get_flag(unsigned char n, int k) { int bit; bit=(n>>k)&0x1; return bit; }
質問者からのお礼コメント
ありがとうございます!助かりました! 改行を要らないところでつけてしまっていました… 丁寧な説明ありがとうございました
お礼日時:5/16 20:33