アプリ版:「スタンプのみでお礼する」機能のリリースについて

マスターマインドゲームを作ったのですが、数字以外が入力されたときの処理が分かりません。以下の方法を利用して考えてみたのですが、うまくいきません。
int i;
while(1) {
if (scanf("%d", &i) != 1){
scanf("%*s");
if(feof(stdin)){
/* エラー処理 */
}
continue;
}

if (i == 1){
break;
}
}
もし、この方法で解決するのならば、エラー処理の部分はどのように入力し、私の考えたプログラムを改良すばよいですか?
ほかにも次のような方法も利用できると思ったのですがどのようにすればよいか思いつきませんでした。どんな方法でもいいので、私が考えたプログラムをどのように改良すれば、数字以外が入力されたときに無限ループを回避できますか?詳しく教えていただくとありがたいです。
char a[20];
int i, j;

scanf("%19[^\n]%*[^\n]", a);
getchar();

if(sscanf(a, "%d %d", &i, &j) != 2 ){
エラー処理
}

~私が考えたプログラム~
   #include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int num1, num2, num3;
int user, user1, user2, user3;
int count;


srand(time(0));
num1=rand()%10;
while (1) {
num2=rand()%10;
if (num2!=num1) {
break;
}
}
while (1) {
num3=rand()%10;
if (num3!=num1 && num3!=num2) {
break;
}
}
printf("%d%d%d\n",num3,num2,num1);


count=1;
printf("重複しない3つの数字:");
while(1) {
while (1) {
           if (scanf("%d", &u) != 1)
{
scanf("%*s");
if(feof(stdin))
                            {
      /* エラー処理 */
}
continue;
}

if (u == 1)
{
break;
}
scanf("%d",&user);
user3=user/100;
user2=(user/10)%10;
user1=user%10;
if (user1!=user2 && user1!=user3 && user2!=user3) {
break;
}
printf("重複してます!重複しない3つの数字:");
}


if (user1==num1 && user2==num2 && user3==num3) {
break;
}

printf("次の数値:");
count++;
}
printf("%d回で当たりました!\n",count);
return 0;
}

質問者からの補足コメント

  • もう読み取れないので処理終了します処理();
    数字以外が入力されたときの処理();
    結果 = 入力した数値を処理(user);
    _ if (結果 == ゲームオーバーです) break; の部分がよく分かりません。また、これらを私のプログラムのどこに入れるべきかも分かりません。
    解説よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/05/26 20:55

A 回答 (1件)

char buff[80];


int user;
while (1) {
_ /* 一行分を読み取る */
_ printf("数値を入力しましょう:");
_ if (fgets(buff, 80, stdio) == NULL) {
_ _ もう読み取れないので処理終了します処理();
_ _ return -1;
_ }
_ /* 読み取った一行分から数値を摘出 */
_ user = atoi(buff);
_ if (user == 0) {
_ _ 数字以外が入力されたときの処理();
_ _ continue;
_ }
_ 結果 = 入力した数値を処理(user);
_ if (結果 == ゲームオーバーです) break;
}
return 0;
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。
参考にしてプログラムを作っています。

お礼日時:2016/05/31 17:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!