二次元配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジェリナゲ
記事: 17
登録日時: 11年前

二次元配列

#1

投稿記事 by ジェリナゲ » 10年前

文字一文字と数字をscanfで3回読み取るプログラムをつっくたのですが、2回しか読み取ることができません
なぜか二回目にiが0から2に飛んでしまいます
なにがいけないのでしょうか

コード:

#include <stdio.h>

int main(void){

  int m,i;
  char va;

  for(i=0;i<3;i++){
    scanf("%c %d",&va,&m);
  }

  return 0;
}


かずま

Re: 二次元配列

#2

投稿記事 by かずま » 10年前

ジェリナゲ さんが書きました:なにがいけないのでしょうか
"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 のマニュアルをよ~く読んでみましょう。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 二次元配列

#3

投稿記事 by みけCAT » 10年前

ジェリナゲ さんが書きました:なぜか二回目にiが0から2に飛んでしまいます
本当にそんな怪奇現象が発生しているのですか?
printfデバッグやデバッガで確認してみてください。
ジェリナゲ さんが書きました:なにがいけないのでしょうか
この怪奇現象が本当に発生しているのであれば、コンパイラかコンピュータがおかしいです。
本当に発生しているわけではないのであれば、仮説を立てるだけ立てて検証しないジェリナゲさんの姿勢がいけないかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 二次元配列

#4

投稿記事 by みけCAT » 10年前

かずま さんが書きました:scanf の "%c %d" を " %c%d" にすると、解決するでしょう。
なぜだかは、scanf のマニュアルをよ~く読んでみましょう。
本当ですか?
ここでいう「解決」とは、どういう状態でしょうか?
https://ideone.com/gN0LWM


ごめんなさい。読み間違えました。
https://ideone.com/bLDJZa
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: 二次元配列

#5

投稿記事 by かずま » 10年前

かずま さんが書きました: printf("i=%d, va=%02x, m=%d, i=%d\n", i, va, m);
を書いてみたら何が悪いかわかるはずです。
訂正します。
printf("i=%d, va=%02x, m=%d\n", i, va, m);
かずま さんが書きました: scanf の "%c %d" を " %c%d" にすると、解決するでしょう。
%c の直前のスペースが重要です。
%d の直前のスペースはあってもなくても問題ありません。

疑問が解決したら、この掲示板を読んでいる人のために
解説をお願いします。
まだ疑問があるのなら、何がわからないのかを質問してください。

ところで、タイトルが「二次元配列」になっているのは、なぜですか?

ジェリナゲ
記事: 17
登録日時: 11年前

Re: 二次元配列

#6

投稿記事 by ジェリナゲ » 10年前

すみません、もともと二次元配列の問題で分からないところがあったのですが、それの原因がここの部分だったので質問するときにタイトルを書き換え忘れました。
遅くなってすみません。
キーボードから入力される文字はバッファと呼ばれるところに一時的に保存されて、エンターを押すと出力され、バッファの中は空になります
scanf()では最後の改行文字がバッファに残るため、次の出力時にその改行文字が出力されてしまうため今回のようなことになりました。
%cの直前にスペースを入れると改行文字を読み飛ばして出力するのでうまく動作するようになります

解決しました、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る