#include #define MOJI 10 int getdec(int keta); void keyflush(int input); void main () { int ans1; int ans2; do { /* 必ず 1 回は実行する */ printf("1つ目の整数を入力:"); ans1 = getdec(MOJI); if (ans1 == -1) { printf("ERROR: 不正な値が入力されました\n"); } } while (ans1 == -1); do { /* 必ず 1 回は実行する */ printf("2つ目の整数を入力:"); ans2 = getdec(MOJI); if (ans2 == -1) { printf("ERROR: 不正な値が入力されました\n"); } } while (ans2 == -1); printf("2つの整数 %d と %d は", ans1, ans2); if (ans1 == ans2) { printf("等しい\n"); } else { printf("異なっている\n"); } } /* ----- 関数の定義 ----- */ int getdec(int keta) { int input; /* 1 文字入力の値 */ int sign = 2; /* 最初のループ時:2 整数:0 負数:1 */ int ans = 0; /* 文字→数値変換の結果 */ int i = 0; /* 繰り返しカウンタ ※ 1 文字読み込んだら増やす */ while ((input = getchar()) != '\n') { i++; /* 繰り返しカウンタを増やす */ if (sign == 2) { /* 符号判定 ※最初の 1 回のみ実行される */ if (input == '-') { /* 負数の時 */ sign = 1; /* 負数フラグ On */ input = getchar(); /* '-' を読み飛ばす */ i++; /* 繰り返しカウンタを増やす */ } else if (input == '\n') { keyflush(input); return -1; /* 行頭での改行はエラー (-1) */ } else { sign = 0; /* 負数フラグ Off */ } } if (i > keta) { /* 繰り返しの判定 */ break; /* 所定回数に達したら抜ける */ } if (input >= '0' && input <= '9') { ans = (ans * 10) + (input - '0'); /* 文字数字を 10 進数に変換 */ } else { keyflush(input); return -1; /* 数字以外の入力ならエラー (-1) */ } } keyflush(input); if (sign) { return ans * -1; /* 負数の時の返り値 */ } else { return ans; /* 整数の時の返り値 */ } } void keyflush(int input) { while (input != '\n') { /* 入力バッファのクリア簡易版 */ input = getchar(); } }