文字一文字と数字をscanfで3回読み取るプログラムをつっくたのですが、2回しか読み取ることができません
なぜか二回目にiが0から2に飛んでしまいます
なにがいけないのでしょうか
二次元配列
Re: 二次元配列
"a123b456c789\n" を入力してみてください。ジェリナゲ さんが書きました:なにがいけないのでしょうか
うまくいくでしょう。
あなたは、"a 123\nb 456\nc 789\n" と入力したのではありませんか?
scanf("%c %d",&va,&m); のあとに、
printf("i=%d, va=%02x, m=%d, i=%d\n", i, va, m);
を書いてみたら何が悪いかわかるはずです。
scanf の "%c %d" を " %c%d" にすると、解決するでしょう。
なぜだかは、scanf のマニュアルをよ~く読んでみましょう。
Re: 二次元配列
本当にそんな怪奇現象が発生しているのですか?ジェリナゲ さんが書きました:なぜか二回目にiが0から2に飛んでしまいます
printfデバッグやデバッガで確認してみてください。
この怪奇現象が本当に発生しているのであれば、コンパイラかコンピュータがおかしいです。ジェリナゲ さんが書きました:なにがいけないのでしょうか
本当に発生しているわけではないのであれば、仮説を立てるだけ立てて検証しないジェリナゲさんの姿勢がいけないかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 二次元配列
本当ですか?かずま さんが書きました:scanf の "%c %d" を " %c%d" にすると、解決するでしょう。
なぜだかは、scanf のマニュアルをよ~く読んでみましょう。
ここでいう「解決」とは、どういう状態でしょうか?
https://ideone.com/gN0LWM
ごめんなさい。読み間違えました。
https://ideone.com/bLDJZa
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 二次元配列
訂正します。かずま さんが書きました: printf("i=%d, va=%02x, m=%d, i=%d\n", i, va, m);
を書いてみたら何が悪いかわかるはずです。
printf("i=%d, va=%02x, m=%d\n", i, va, m);
%c の直前のスペースが重要です。かずま さんが書きました: scanf の "%c %d" を " %c%d" にすると、解決するでしょう。
%d の直前のスペースはあってもなくても問題ありません。
疑問が解決したら、この掲示板を読んでいる人のために
解説をお願いします。
まだ疑問があるのなら、何がわからないのかを質問してください。
ところで、タイトルが「二次元配列」になっているのは、なぜですか?
Re: 二次元配列
すみません、もともと二次元配列の問題で分からないところがあったのですが、それの原因がここの部分だったので質問するときにタイトルを書き換え忘れました。
遅くなってすみません。
キーボードから入力される文字はバッファと呼ばれるところに一時的に保存されて、エンターを押すと出力され、バッファの中は空になります
scanf()では最後の改行文字がバッファに残るため、次の出力時にその改行文字が出力されてしまうため今回のようなことになりました。
%cの直前にスペースを入れると改行文字を読み飛ばして出力するのでうまく動作するようになります
解決しました、ありがとうございました。
遅くなってすみません。
キーボードから入力される文字はバッファと呼ばれるところに一時的に保存されて、エンターを押すと出力され、バッファの中は空になります
scanf()では最後の改行文字がバッファに残るため、次の出力時にその改行文字が出力されてしまうため今回のようなことになりました。
%cの直前にスペースを入れると改行文字を読み飛ばして出力するのでうまく動作するようになります
解決しました、ありがとうございました。