#include void main () { unsigned int input, ans, i, flag; flag = 1; ans = 0; /* for (input = ' '; input <= '~'; input++) { if ((input >= '0' && input <= '9') || (input >= 'A' && input <= 'F') || (input >= 'a' && input <= 'f')) { printf("[%c] %d\n", input, input); } } exit(); */ printf("16 進数を表す文字列を最大 4 桁で入力:"); for (i = 0; i < 4 ; i++) { input = getchar(); if (flag == 0) { if (input == '\n') { break; } } flag = 0; while (!((input >= '0' && input <= '9') || (input >= 'A' && input <= 'F') || (input >= 'a' && input <= 'f'))) { if (input == '\n') { printf("16 進数を表す文字列を入力する必要があります:"); ans = 0; i = 0; } input = getchar(); } /* 文字を数値に変換 */ if (input >= '0' && input <= '9') { input -= '0'; /* input - '0' で文字コードが数値になる */ } if (input >= 'A' && input <= 'F') { input = (input - 'A') + 10; /* 'A' を 10 にしたい */ } if (input >= 'a' && input <= 'f') { input = (input - 'a') + 10; /* 'a' を 10 にしたい */ } /* input の値は [0-9], [A-Z], [a-z] 以外ありえない …といいなぁ */ ans = ans * 16 + input; } printf("10 進数に変換:%d\n", ans); }