マスターマインドゲームを作ったのですが、数字以外が入力されたときの処理が分かりません。以下の方法を利用して考えてみたのですが、うまくいきません。
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;
}
No.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;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#if 1 #elseの意味について
-
プログラミングで二番目に大き...
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
C言語 数字以外を入力させない...
-
getcの改行判定
-
配列を使って魔方陣
-
for文
-
c言語で平均をだす
-
プログラム
-
中央値をもとめる
-
素因数分解のプログラムを作成...
-
if文の中に
-
C言語についてですfor ifをつか...
-
while文を使った問題なのですが...
-
c言語のwhile文を使った計算で...
-
C言語。どうしてコンパイルでき...
-
配列を関数に渡す方法
-
データ管理プログラムを作って...
-
C言語でのトランプシャッフルに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
getcの改行判定
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
プログラミングに関して
-
C言語についてですfor ifをつか...
おすすめ情報
もう読み取れないので処理終了します処理();
数字以外が入力されたときの処理();
結果 = 入力した数値を処理(user);
_ if (結果 == ゲームオーバーです) break; の部分がよく分かりません。また、これらを私のプログラムのどこに入れるべきかも分かりません。
解説よろしくお願いします。