• ベストアンサー

C言語の問題の続き

naturalの回答

  • natural
  • ベストアンサー率37% (419/1115)
回答No.5

naturalです。 またまたコメント読みました。 そしてまたまた長くなります。 ソースを、と言うことなのですが、これは順序が逆だと思いますよ。(^_^; 途中まででも良いし、間違っていても良いから、まず自分の作ったプログラムを提示して問題点の指摘やヒントを求めるべきだと思います。 授業か研修か判りませんが、普通先にソースは示されないでしょう? 厳しいようですがあなた自身のためだという信念で敢えてソースは書きません。 その代わり1番の時の様にプログラムの流れを書こうと思いますので、まずは自己チェックしてみてください。 では2番の処理の流れを見ていきましょう。 1.変数定義・初期化 2.文字列の入力 3.文字列の長さ測定(長さ用変数に保持) 4.永久ループ |4-1.数値用変数初期化 |4-2.番号入力(番号用文字列変数に入力) |4-3.ループ(番号用文字列の先頭から末尾(ヌル文字)まで) ||4-3-1.数値用変数を10倍する ||4-3-2.現在の文字は数字ではない?(文字定数の範囲で判定) |||4-3-2-1.ループ脱出(内側のループ) ||4-3-3.現在の文字を数値に変換した結果を数値用変数に加算 |4-4.最後に見た文字はヌル文字ではない? ||4-4-1.数字以外の文字の入力があった旨のメッセージを出力 ||4-4-2.永久ループ先頭へ戻る |4-5.数値用変数は長さ用変数の値未満か?(「未満」がポイント) ||4-5-1.永久ループ脱出 |4-6.文字列の範囲外である旨のメッセージ出力 5.結果表示 では解説です。 この問題のポイントはループが2つ存在することです。 入力にエラーがあったときに再入力させるために大きな永久ループで囲います。 その配下に数字かどうかのチェック及び数値への変換のループが入ります。 で、数字かどうかのチェックですが、途中でエラー(つまり数字以外の文字)が見つかった場合はループを抜けます。 ループを抜ける命令、ご存じですよね?(解らなければ補足要求下さい) 勿論途中で引っかからなくても文字列の末尾、ヌル文字まで来れば抜けます。(その場合全て数値への変換処理を通ります) つまりこのループは二通りの抜け方をしてくるわけです。 文字列の途中までとヌル文字まで、何れがエラーかは判りますよね。 ですからこのループを抜けた後で訊いてあげます。 「最後に見た文字はヌル文字ではない?」と。(4-4参照) この条件に引っかかれば数字以外の文字があったと言うことですからエラーメッセージを出力して永久ループ先頭に戻してあげます。 戻す命令はご存じでしょうか?(同じく必要ならば補足要求を) この場所はすでに内側のループの外で永久ループの直下ですので、この命令は永久ループに対して効果を発揮します。 それでは戻されなかった場合の処理の説明を続けます。 この段階で数値への変換が済んでいるはずですから数値が最初に入力された文字列の長さ未満であるか訊きます。 なぜならば文字列の添え字は0から始まるためです。(短い文字列を想定して考えてみてください) この条件に当てはまった場合は全ての入力がOKと言うことですから永久ループを抜けてあげましょう。 抜けられなかったらループ末尾のエラーメッセージの出力を通って自動的に永久ループ先頭に戻ります。 抜けられた場合は結果表示するだけです。 尚、数値への変換は以前書いた回答をもう一度読み返してみてください。 もし理解できなかったらコメント下さい。 それでは頑張ってください。p(^^)q

関連するQ&A

  • 回答者のマナー?

    ここの質問に対する回答 http://oshiete1.goo.ne.jp/kotaeru.php3?q=62568 ここの回答のまるまるコピー! http://oshiete1.goo.ne.jp/kotaeru.php3?q=29341 参考URLぐらい書くべきだと思うんですが・・・ みなさんはどう思われますか?

  • QNo.369138の続き

    QNo.369138の設問に対して解答頂いたのですが、全てやりましたが、問題が解決出来ません。OS・Windowsの再インストールしかないのでしょうか? 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=369138

  • ひいたら終わってしまうのかな… の続き

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1869405 ↑の彼女の方からなんと「今日はどうする?」と連絡がきました。 ひいておきたい心境なので断っておきましたが、皆さんならどうしますか? 自分の主体性がない!と怒られそうですが皆さんのご意見もお聞かせ下さい。

  • IPアドレス(2)

    たびたびすみません。 前回の回答に載っていた方法を試そうとしたのですが、うまくいきませんでした。 原因はDHCPが有効になっているところにあると思うのですが、どうでしょうか。 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=376592

  • 動物が好きな方、 教えて下さい........心配です!!(その2)

    こんにちは すいません、URL間違えていました。 冷やかしではないので、アドバイスやご助言を頂けたら、とても助かります。 URLです <今度は間違えないようにしますので(^^ゞ)> http://oshiete1.goo.ne.jp/kotaeru.php3?q=1665435 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1667874 皆さんのご意見をお聞かせ願えないでしょうか。 宜しくお願いします。

    • ベストアンサー
  • 前回access2000の+/-データについての質問の続き

    前回ACCESS2000で+/-データについて質問させていただいた物です。 前回はSHADOW MOONさんにお答えいただいたNO.4の方法をとらせていただいたのですが、その時に+の合計と-の合計を別々に取りたいのですが やり方がわかりません。 お分かりの方お教え願えないでしょうか。お願いします。 参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=331891

  • ↓の質問の続きです。

    低圧下では間隙ができると聞いたのですが、どのような影響があるのでしょうか?実験は、100mmHg、200mmHg、300mmHg、400mmHgの四種の条件で行いました。 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=218947

  • 昨日の続き

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=913493 結局これは直るのでしょうか。 何かファイルをコピーしなければいけないのでしょうか?

  • IllustaratorのパスがPhotoshopに思ったようにコピーできない。 (続き)

    前回の続きです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=953839 やっぱり何か別のオブジェクトを基準にしてコピーするしか方法はないんでしょうか? よろしくお願い致します。

  • 前回の質問の続きです

    前回の質問(http://oshiete1.goo.ne.jp/kotaeru.php3?q=1270790)で coregaのWLCB-54GTを買おうと思って電器屋に行ったのですが、 この型番がなく、そのときに店員さんに薦められたのが WLCB54AGだったのです。 薦められた物でも大丈夫でしょうか? ちょっと心配になったもので。 よろしくお願いします。