No.7ベストアンサー
- 回答日時:
No.2です。
No.5も回答がありますので補足程度に。
>文字コードをだす場合と、変数内の文字を打たす場合の書き方が分かりません。
「文字」「文字列」と関連して「出力書式」についても勉強が必要です。「%c」や「%d」等の「c」や「d」の部分です。
以下に一部を簡単に
c:指定されたアドレス(変数)の内容を文字として出力する
d:指定されたアドレス(変数)の内容を10進数の数値として出力する
s:指定されたアドレス(変数)を先頭として「\0(NULL文字)」が検出されるまで内容を文字として出力し続ける。
です。
従って、
>YY='A'としたときに、Aのコードを知りたいときには、print(”%c”、YY);とするのでしょうか。
こちらは問題ありませんが
>また、Aという文字を印字させたいときは、print(”%s”、YY);とするのでしょうか。
は「運が良ければ」意味不明な文字の羅列がある程度表示されるだけで終わり、運が悪ければ「保護エラー」で終了です。
No.6
- 回答日時:
「文字」と「文字列」について、もっと勉強した方がよさそうです。
>X[]="abc"としたときに、X[1]を知りたいときには、print(”%s”、X[1]);とするのでしょうか。
printf("%c", X[1]);
でも
printf("%d", X[1]);
でも
printf("%x", X[1]);
でもお好きなように。
>YY='A'としたときに、Aのコードを知りたいときには、print(”%c”、YY);とするのでしょうか。
こちらは問題ありませんが、
>また、Aという文字を印字させたいときは、print(”%s”、YY);とするのでしょうか。
は一般保護違反などで止まる(落ちる。吹っ飛ぶともいう)でしょう。
変数YYの型が不明ですが、「YYに入っている値を文字列の先頭を指しているポインタ」として解釈しますので…。
# ところでprint()ではなくprintf()では?
>この両者の違いとそれぞれ意味するところ、使い方がさっぱり分かりません。
#1で回答ついているとおり、'.'は「文字」です。
char型の変数1つに格納可能です。
"."では「文字列」です。
char型の変数1つでは格納できません。
また、文字列リラテルではすでに何度も書かれている通り先頭アドレスとして扱われます。
よって…
while( ch1 != "."){ }
だと、ch1に入っている値とどこかに確保された"."の先頭アドレス('.','\0'と連続するデータの'.'が格納されたアドレス)との比較になります。
よって、ch1がポインタでない限りこの判定式は常に真となりますので、
このループから抜けることはありません。
# ch1がint型やchar型の変数なら、おそらくコンパイラから警告が出るでしょう。
# ch1がC+などのstringクラスなどの場合には、上記のような表記が可能な場合もありますが。
No.5
- 回答日時:
No.2です。
すでに回等がありますので、補足程度に。
> この両者の違いとそれぞれ意味するところ、使い方がさっぱり分かりません。
端的に説明すると
「(半角/8bit)1文字」を表すときに「'」(シングルクォーテーション)「文字列」を表すときに「"」(ダブルクォーテーション)
を使用します。
「A」という「文字」を表す場合には'A'、「ABC」という「文字列」を表す場合には"ABC"という形で使用します。
char a = 'A'; // 1文字を格納する変数
char b[10] = "ABC"; // 文字の配列(文字列格納の変数)
ここで気をつけてほしいのは、'A'と"A"は意味が違うということです。
'A'は「A」という1文字ですが、"A"は実際には「A \0(NULL文字)」という「2文字」で構成されているということです。
C言語は、基本的に配列を等号/不等号で判断することができません。
従って、「while( ch1 != "."){ }」と記載した場合には、コンパイル時にエラーとなるはずです。
ちなみに、以下のコードは全て同じ動作をします。
while( ch1 != '.' ){ }
while( ch1 != 0x2E ){ }
while( ch1 != 46 ){ }
1番目は質問のコード、下二つは「ピリオドを現す文字コード」をそれぞれ16/10進数で記載したものです。
C言語の基本は数値(データ)です。そのデータがどんな意味を持っているかという意味で「'」は「1文字の文字データ」を、「"」は「複数の連続した文字データ」という意味で使います。
SilverThawさん、ありがとうございます。
X[]="abc"としたときに、X[1]を知りたいときには、print(”%s”、X[1]);とするのでしょうか。
YY='A'としたときに、Aのコードを知りたいときには、print(”%c”、YY);とするのでしょうか。
また、Aという文字を印字させたいときは、print(”%s”、YY);とするのでしょうか。
文字コードをだす場合と、変数内の文字を打たす場合の書き方が分かりません。
宜しくお願いします。
No.4
- 回答日時:
まず、記号の呼び方について、
「.」は、「ピリオド」または「ドット」と呼びます。
「,」は、カンマと呼びます。
で、
'.'は、ピリオド文字を表わします。
ピリオド文字=ピリオドの文字コードです。
文字は、char型です。
char型は8ビットなので1文字しか表現できませんが、
その8ビットの文字の集合を文字列と呼び、
"abc"といったダブルクオーテーションで囲んで表現します。
"abc"で表現された文字列の型は、char型ではなく、
char *型(charへのポインタ)になります。
この"abc"は、'a','b','c','\0'という4つの文字が
並んだ文字領域の先頭アドレスを表わします。
また、"a"は、'a'と'\0'の2つの文字が並んだ文字領域の
先頭アドレスを表わし、これを1文字の文字列と呼びます。
('\0'は、文字列の終わりを表わす文字なので、文字数に
数えません。)
ちなみに、""という表現も可能で、これは
'\0'だけの文字領域のアドレスを表わします。
これは、文字数0の文字列です。
No.3
- 回答日時:
お疲れ様です。
もし、何かの本を読まれていて、それでも分からないという事であれば、その本のタイトルをお教えお願い出来ないでしょうか?
他の人にも勧めない本として記憶します。
で、違いについては参照URLを参照の事。
Web上にはあまり良い情報が無かったですが、参照URLに記載したのが一番わかりやすかったかな?と
参考URL:http://ftc.suki.net/tpb/saruc05.html
No.2
- 回答日時:
>「while( ch1 != '.'){ }」と言う場合の「'.'」は、どのような意味でしょうか。
whileの条件式の意味は「ch1の内容が「.」(ピリオド)でない間ループする」です。
つまり、どこかでch1に何らかの値が入力(格納)され、その内容が「.」になるまでループします。
この処理では都合上「.」を使っているのであって、処理的には別に「1」でも「a」でも一緒で特別の意味は持っていません。
SilverThawさん、回答有り難うございます。
>( ch1 != '.')の意味は「ch1の内容が「.」(ピリオド)でない間ループする」です。
# ピリオドなら、「.(カンマ)」はchar型なので、「”.”」とダブルコーテーションで囲ってやるべきなのではないでしょうか。
「'.'(シングルコーテーション)」と「.(カンマ)の文字コード」にわざわざする意味はあるのでしょうか。
この両者の違いとそれぞれ意味するところ、使い方がさっぱり分かりません。
No.1
- 回答日時:
X='A'
↓
Xに「A」の文字コードを代入する
X="A"
↓
Xに「A」という文字列(文字リテラル)のアドレスを代入する。
なお、Xに入力されたアドレスには「A」の文字コード、その次のアドレスには「'\0'」が格納されている。
文字と文字列の違いです。
この回答への補足
>Xに「A」という文字列(文字リテラル)のアドレスを代入する。
なお、Xに入力されたアドレスには「A」の文字コード、その次のアドレスには「'\0'」が格納されている。
このXのアドレスと、その次のアドレスの「'\0'」をどのように確認したら言いのでしょうか。
okg00さん、回答有り難うございます。
「while( ch1 != '.'){ }」と言う場合の「'.'」は、どのような意味でしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムによく出てくるst...
-
WSH(VBS)でJSONの文字列を読み...
-
文字列から1文字取り出すには?
-
strtokについて
-
C#でstringをポインタとして渡す
-
binaryに対して正規表現を適用...
-
%dなどの違い
-
自作関数を用いた文字の反転
-
nullと""、\\0とEOFの違いにつ...
-
文字列の分割
-
int型での文字列の扱いについて
-
C言語 配列の長さの上限
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
System.IO.Directory.GetFiles...
-
C言語のポインタに直接アドレス...
-
Integer変数をカラにしたいので...
-
char*を初期化したいのですが
-
char型にint型の数値を代入する。
-
C言語のintとcharの違いってな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムによく出てくるst...
-
C#でstringをポインタとして渡す
-
nullと""、\\0とEOFの違いにつ...
-
WSH(VBS)でJSONの文字列を読み...
-
VB6.0でのバイナリデータの扱い...
-
TCL言語で文字列検索方法を教え...
-
C++で入力した文字列から数字を...
-
シリアル通信で0x00を送信した...
-
16進数を2文字ずつ配列に格納し...
-
char型配列の最大要素数
-
[C++]WCHARの1文字目しか表示で...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
構造体→文字列→構造体 をする方法
-
%dなどの違い
-
数字の入った配列をファイルへ...
-
c#で他のアプリの文字入力フォ...
-
引用符と二重引用符
-
Shift_JIS(16進)を文字に変換す...
-
CSVファイルの「”」について
-
AnsiStringについて
おすすめ情報