ある問題集で
targetとnumが合っているまで繰り返すプログラム何ですけど、
voidGuessNumber()
{
char target[5];
char num[5];
int count =0;
createRandNumber(target)
do{
printf(%d回目各桁が異なる%dけたの数を入力してください:,++count,5)
scanf("%4d",num);
while(isValidNumber(num)==FALSE);
{
printf(入力が正しくありません、再度入力してください:);
scanf("%4d",num);
}
}while(isMatch(target,num)==FALSE);
}
int isValidNumber(char num[])
機能:文字列numの各文字がすべて異なる数字の時TRUE,それ以外のときFALSEを返す。
int isMatch(char target[],char num[])
機能:targetとnumの文字数があっているときTRUEそれ以外FALSE
何ですけど、これだと永遠に終わらないような気がするのですが、これは間違いなのかなと思うんですけどどうでしょうか?なにか足りないところがあったら補足しますのでよろしくお願いします。
No.6ベストアンサー
- 回答日時:
No.4 です。
>なにか勘違いしているのでしょうか?
はい。
>isValideNumberI(num)ですべて異なる数字のときTRUEなのでこれでは、繰り返されて、
isValideNumberI() 関数は、taeget が引数となっていないことから、taeget の内容は判りません(←★重要)。
判るのは、引数で渡された num の内容、"1234" の'1', '2', '3', '4' が「すべて異なる数字」ということだけです。
これは、
>int isValidNumber(char num[])
>機能:文字列numの各文字がすべて異なる数字の時TRUE,それ以外のときFALSEを返す。
↑↑↑↑↑↑↑↑↑
と、ご自分で書いています。
回答ありがとうございます。ということは、例えばnumが”1124”の場合はFALSEにるということでしょうか?確認よろしくお願いします。
No.5
- 回答日時:
ループの内側に
scanf("%4d",num);
が入ってて、ループするたびにnumの中身が変わる。
ループするたびにnumの中身が変わるのなら、必ずいつかは「ループを脱出する条件に合うnum」になる筈。
>間違いなのかなと思うんですけどどうでしょうか?
一番の間違いは「numは不変」と思い込んでしまった事。
とはいえ「毎回、ループを脱出する条件に合わない数値を入力し続け、ループを脱出する条件に合う数値を絶対に入力しない」って事をすれば、質問者さんの言う通り「永久に終らない」だろうけど。
回答ありがとうございます。例えば、taegetで”1234”ができて、入力で ”1234”と入力したとしてもisValideNumberI(num)ですべて異なる数字のときTRUEなのでこれでは繰り返されて、"4567" を入力して外にでてもisMatch(target,num)で文字列が合わないので繰り返されてしまうので終わらないと思うのですが・・・なにか勘違いしているのでしょうか?あとscanf("%4d",num);は間違いでscanf("%4s",num);の間違いです。
No.4
- 回答日時:
>int isValidNumber(char num[])
>機能:文字列numの各文字がすべて異なる数字の時TRUE,それ以外のときFALSEを返す。
>int isMatch(char target[],char num[])
>機能:targetとnumの文字数があっているときTRUEそれ以外FALSE
例えば、createRandNumber() で target に、"1234" ができて、入力で、"4567" とすれば、
共に4桁で、「文字数があっている」ので isMatch() は TRUE を返し、do while は終了するのでは。
#3 補足
>int isValidNumber(char num[])で文字列numの各文字がすべて異なる数字のときTRUEになってそこから出るので
>int isMatch(char target[],char num[])で一生文字列が合わないことになりTRUEになることはないからです。
「文字『列』が合わない」とは、機能の変更でしょうか。「文字『数』が合うか否か」ではなかったのでは?。
たとえ「文字列が合うか否か」機能の場合でも、入力で、"1234" とすれば、TRUE になるかと。
具体的に、文字列を使って「補足」をお願いします。
回答ありがとうございます。「文字列が合わない」の間違いです。taegetで”1234”ができて、入力で”1234”と入力したとしてもisValideNumberI(num)ですべて異なる数字のときTRUEなのでこれでは、繰り返されて、"4567"を入力して外にでてもisMatch(target,num)で文字列が合わないので繰り返されてしまうので終わらないと思うのですが・・・なにか勘違いしているのでしょうか?
No.1
- 回答日時:
提示されたコード(の断片)で、
do と while の数が異なっています。
そのため、提示されたコードの真実性に疑問が生じています。
せっかくですから、当該のコード「全体」を提示なさってはいかがでしょうか。
回答有難うございます。コードが間違っていました。
正しくは
voidGuessNumber()
{
char target[5];
char num[5];
int count =0;
createRandNumber(target)
do{
printf(%d回目各桁が異なる%dけたの数を入力してください:,++count,5)
scanf("%4d",num);
while(isValidNumber(num)==FALSE)
{
printf(入力が正しくありません、再度入力してください:);
scanf("%4d",num);
}
}while(isMatch(target,num)==FALSE);
}
です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10進数からN進数に変換するプロ...
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
C言語階乗の総和を求める
-
n^kのwhile文のプログラムについて
-
switch文の使い方について
-
プログラミングで二番目に大き...
-
getcの改行判定
-
配列を使って魔方陣
-
代入を含む条件式
-
File Edit Options Buffers Too...
-
for文の中にswitch文はいれられ...
-
C言語のプログラミング (基礎...
-
プログラミングソースコード(...
-
2÷3などの余りについて
-
信頼区間の1.96や1.65ってどこ...
-
std::set<int> で、ある値が何...
-
「Aに対するBの割合」と「Aに対...
-
#define _CRT_SECURE_NO_WARNIN...
-
【gcc・cygwin】multiple defin...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
10進数からN進数に変換するプロ...
-
getcの改行判定
-
C言語で電卓を作成する。
-
プログラミングで二番目に大き...
-
配列を使って魔方陣
-
C言語プログラムが理解できなくて…
-
計算結果がlong型以上になる場...
-
scanfが実行されません
-
素因数分解のプログラムを作成...
-
プログラム
-
while文を使った問題なのですが...
-
C言語階乗の総和を求める
-
C言語 エラー表示 break の位...
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
初心者です。for文、if文を使っ...
おすすめ情報