質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

1078閲覧

C言語入門者です。char型について

dsajkldf

総合スコア5

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2021/08/17 15:08

C言語入門者です。char型について

char型の事がイマイチ分からなく、質問させていただきます。

char型は整数型(文字型)として使うことが出来ると思いますが、printfで整数を表すことは可能ですが、

scanfを使ってprintfで文字を表すことは可能ですが、scanfを使って、2桁以上の整数を表すということはできないのでしょうか?

#include<stdio.h>
int main(void) {

char moji; scanf("%d", &moji); printf("%d", moji); return 0;

}

のように書いたのですが、上記のソースコードは2桁以上は表せないのでしょうか?

また、そもそも%d自体が4バイトのためchar型に格納することは出来なく、そもそもchar型で2桁以上の整数を表すことはできないのでしょうか?

とある参考書では

#include<stdio.h>

int main(void){

char a = 'A';
printf("%d\n",a);
printf("%c\n",a);

retrun 0;

}

と書いていて、文字を入力すると、文字コードや、文字が出力されますが、

これを逆にscanfを使って、2桁の文字コードを入力して、文字コードや文字が出力されないかと思っていました。

scanfでchar型で整数2桁はやはりできないのでしょうか?
整数1桁なら表示できたため、2桁でもできるのではないかと思ったのですが、どうやって書けばよいのかが分かりません。

文章が分かりにくいと思いますが、教えていただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2021/08/17 15:20

ソースコードはコードブロック (```) で囲みましょう
guest

回答3

0

ベストアンサー

charは、-128127の整数値(処理系によっては0255)を扱えますので、2桁の数値は大丈夫です。

scanfでは%dint型変数への格納なので、char型変数にこれを使うことは出来ません。
長さ指定子hhを付けて%hhdと書くと、signed char型変数(普通はchar型と同じ)に格納できます。

printfの場合は、引数にchar型変数を書くと自動的にint値になるので%dで良いです。%hhdでも良いです。

投稿2021/08/17 15:30

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dsajkldf

2021/08/17 16:43

回答ありがとうございます。 うまくいきました。 本当に助かりました。
guest

0

scanfでは%dに対してはint型変数のアドレスを指定する決まりです。

printf%dに対してはint型の値を渡すことになっています。

char a = 'A';
printf("%d\n",a);

では%dに対してchar型の値を渡しているではないかと疑問に思われるかもしれませんが、Cではint型を使用できる場所にそれよりも短い語長の型が使用されているとき、自動的にint型に値が変換されることになっています。ですから変数aの型はcharですが、printfに対しては、それをint型に昇格した値が渡されることになります。これを汎整数拡張と言います。


あと、質問では変数が表現できる値の範囲と、数値を表現している文字列をスキャンする際の「文字数」とで混乱が見られるようです。そこはちょっと、どう説明したらよいかわからないので、ご自分でもう一度整理してみてください。

投稿2021/08/17 15:24

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dsajkldf

2021/08/17 16:45

回答ありがとうございます。 %dはint型だったのですね。 色々書いてくれて勉強になりました。
guest

0

%d は数値です。したがって int 型でデータを受け取れます。
何が違うのかよく見てくださいね。

c

1#include <stdio.h> 2 3int main(void) { 4 5 int moji; 6 7 scanf("%d", &moji); 8 printf("%d\n", moji); 9 10 return 0; 11}

投稿2021/08/17 15:20

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dsajkldf

2021/08/17 16:45

回答ありがとうございます。 %dはint型で使うべきなのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問