- ベストアンサー
記号を入出力する際の指定子
2次元配列に*や&といった記号を入力し出力したいのですが、 この場合の指定子は%cでいいのですか? 配列の宣言をchar、scanf,printfの指定子を%cにしたのですがうまくいきませんでした。何が間違っていますか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>スキャンしないようにするにはどうしたらいいですか? scanf(" %c",&data[i][j]); とテキトーに対応してみたり。
その他の回答 (5)
- koko_u_u
- ベストアンサー率18% (216/1139)
>でも、どうしてスペースを入れるとうまく出来たのでしょうか? scanf() の仕様です。たまにはマニュアルも読みましょう。
お礼
自分でもいろいろと調べてみます! ありがとうございました。
- koko_u_u
- ベストアンサー率18% (216/1139)
>このソースだと出力の時、記号自体は出力されるのですが、 >行や列の数がめちゃくちゃになってしまいました。 単純に空白などの「見えない文字」もスキャンしただけ、と予想。
補足
>空白などの「見えない文字」もスキャンしただけ スキャンしないようにするにはどうしたらいいですか? それとも、どうしてもスキャンしてしまうのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
「行や列の数がめちゃくちゃになる」といわれてもねぇ. もっと具体的に, 「こういう入力に対してこんな出力が得られた」と書いてもらえないかなぁ.
お礼
すみませんでした。次からはもっと詳しく書くようにします。 ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
%cは文字コードを文字として表す場合に使います。 char c = 0x41; printf("%c",c); //文字"A"が表示される %sは文字列を表す場合に使います。 char s[] = {"&"}; printf("%s",s); //"&"が表示される & や * を内部でどのように使うかで、記号も決まります。 他の数字列などと組み合わせて(文字列として)使用するなら"%s" 単独の文字をそのまま(コードとして)使用するなら"%c"でしょう。
お礼
ありがとうございました!
- koko_u_u
- ベストアンサー率18% (216/1139)
>配列の宣言をchar、scanf,printfの指定子を%cにしたのですがうまくいきませんでした。 >何が間違っていますか? ソースを補足に。 そしてどういう風に『うまくいかない』かも補足に。
補足
char data[4][4]; for(i=0;i<4;i++){ for(j=0;j<4;j++){ scanf("%c",&data[i][j]); } } printf("\n"); for(i=0;i<4;i++){ for(j=0;j<4;j++){ printf("%c",data[i][j]); } printf("\n"); } このソースだと出力の時、記号自体は出力されるのですが、行や列の数がめちゃくちゃになってしまいました。
補足
>scanf(" %c",&data[i][j]); としたら出来ました! でも、どうしてスペースを入れるとうまく出来たのでしょうか?