9文字以内を無視する仕様になっていますが何桁でも入力できるように直したいです。
0~256の範囲の整数で'0'~'9'以外の文字が入力されたらエラーになる仕様ですが
if(dec >= 0 && dec <=255)と書いたのに255以上も処理されてしまいます。
どなたか分かる方教えていただけると助かります。よろしくお願いします。
#include <stdio.h> void main(){ int data[1] = {0}; int i= 0; int ch; int cnt; unsigned char dec; char *print_bin(unsigned int); printf("数値入力:"); while( (ch = getchar()) != '\n' ){ // 1件分の入力処理 if( i < 9 ){ // 9桁までを有効 if( ch >= '0' && ch <= '9' ){ // 数字文字 data[cnt] = data[cnt] * 10 + ch - '0'; } else{ printf("Error!!:数字文字以外の入力\n"); return; } i++; } } if( i == 0 ){ // 改行のみの入力 printf("Error!!:改行のみの入力\n"); return; } dec = data[0]; if(dec >= 0 && dec <=255){ //0-255の文字 printf("dec=%d hex=%x bin=%s\n", dec,dec,print_bin( dec )); dec = dec >> 1; printf("右に1ビットシフトdec=%d hex=%x bin=%s\n",dec,dec,print_bin( dec )); dec = dec << 1; printf("左に1ビットシフトdec=%d hex=%x bin=%s\n",dec,dec,print_bin( dec )); dec = ~dec; printf("全ビット反転dec=%#d hex=%#x bin=%s\n",dec,dec,print_bin( dec )); } else{ printf("Error!!:0-255以外の入力\n"); } } char *print_bin( unsigned int x ){ static char out[10]; unsigned int n, i, j; n = 1<<7; j = 0; for( i=0; i<8; i++ ){ if( x&(n>>i) ) out[j]='1'; else out[j]='0'; j++; if( i%4==3 ){ out[j]=','; j++; } } out[j-1] = '\0'; return out; }