ページ 1 / 1
C原語の課題の質問です。
Posted: 2008年8月09日(土) 14:11
by ナオユキ
<結果例>
指定文字 ?a
文字列 ?abcabcabc
変換後文字列 \bc\bc\bc
変換文字数 3
のようになるはずなんですが、実行しても結果が得られません。
while文で友達が試したところ、上手くいったようです。
C原語は初心者なので、解説をいただけたらうれしいです。
よろしくおねがいします。
Re:C原語の課題の質問です。
Posted: 2008年8月09日(土) 14:45
by バグ
とりあえず、「原語」ではなくて「言語」です。
Re:C原語の課題の質問です。
Posted: 2008年8月09日(土) 14:51
by バグ
mojiがint型なのは何故ですか?
Re:C原語の課題の質問です。
Posted: 2008年8月09日(土) 15:01
by array
それと、私も1言。
>while文で友達が試したところ、上手くいったようです。
forでもできなくないですけど、文字列の長さが不確定なので、forよりwhileを使った方が良いという事だと思います。forはループする回数が決まっている時に使う事が多いいみたいです。それに対しwhileはループする回数が不確定の時に使用するみたいです。
Re:C原語の課題の質問です。
Posted: 2008年8月09日(土) 15:28
by 管理人
scanf関数を使うとき、変換指定文字に対して何の型を使わないといけないか、
確認してみて下さい。
http://www9.plala.or.jp/sgwr-t/c/sec05.html
バグの原因は
恐らくcharを使わないといけないのにintを使っている為、intが4バイトだとすると、
初めの1バイトしか値が入っていないからじゃないでしょうか。
強引な話、mojiを0で初期化するか、グローバル変数にすればバグが直るかと。
すべきことはintをcharにすることですかね。
後、PFとか書いてあるのは、これは宿題のサンプルか何かですか?
Re:C原語の課題の質問です。
Posted: 2008年8月09日(土) 18:42
by box
> forよりwhileを使った方が良い
どちらがよい、ということはないです。
例えば、以下の2つの書き方は、「何かの文」に continue; が
なければ全く等価です。
1)for文の場合
for (A; B; C) {
/* 何かの文 */
}
2)while文の場合
A;
while (B) {
/* 何かの文 */
C;
}
Re:C言語の課題の質問です。
Posted: 2008年8月10日(日) 21:24
by ナオユキ
訂正しました。すいません。
みなさんの数々の解答を参考にもう一度やってみます。
ご協力ありがとうございました。
PFは#defineで定義したprintfです。
過去問題にでていたので、ちょっとやってみたくなりしてみました。
Re:C言語の課題の質問です。
Posted: 2008年8月10日(日) 22:40
by 組木紙織
>PFは#defineで定義したprintfです。
ちょっとやってみるぐらいならいいと思いますが。
(使い方の練習にはなるので)
printf()などの関数名を#defineするべきではないと思います。
というより#defineは最小限にすべきであるとおもいます。
理由は#defineが単純な文字列置換であるので、無意味に使いすぎると
意図しない部分で置換される可能性が高くなるからです。