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で質問しましょう!
似たような質問が見つかりました
- 会社・職場 転職(派遣)し1ヶ月過ぎました。事務補助してます。教育係りをしてくれてる同じ派遣会社の人なんですが、 3 2023/05/21 20:05
- 統合失調症 精神障害者である私の結論(否定ではなく共存) 2 2022/12/09 23:48
- その他(家族・家庭) 真剣に悩んでます。教えてください。 私は授かり婚なので、先月出産しました。 元々旦那と二人で育児を頑 8 2022/04/02 10:00
- 会社・職場 後継者としてもうやっていけないです。 1 2023/08/27 19:33
- その他(恋愛相談) 少し長文になるかも知れませんが成るべくまとめて回答を頂けた時に詳しく説明します。 私と彼の事を少々説 2 2023/01/21 22:22
- XML MSFormsとは何ですか? 2 2022/05/02 09:38
- 外国株 分配金利 1 2022/09/05 00:40
- 作詞・作曲 スタジオワン5を購入しました 初心者向けの解説本を教えてくれませんか 1 2022/11/08 20:45
- アンテナ・ケーブル 初心者です。 三心2.0mmケーブルの導通チェックのやり方を教えていただきたいのですが、テスターでど 1 2023/05/15 07:39
- JavaScript HTML,JS初心者です。 2つのselectボックスが有り その選択の組み合わせにより 指定した文 3 2022/03/31 23:35
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字の入った配列をファイルへ...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
c#で他のアプリの文字入力フォ...
-
fgetsで配列に数字を入れる。
-
C#でstringをポインタとして渡す
-
C++で入力した文字列から数字を...
-
C言語 文字列 比較に関する質問
-
16進数を2文字ずつ配列に格納し...
-
文字列数値化
-
K&R、p.107の演算4-12の問題の...
-
C言語で、ワイド文字の表示がう...
-
[C++]WCHARの1文字目しか表示で...
-
C言語の課題で困っています;
-
Shift_JIS(16進)を文字に変換す...
-
javaについて、char型に関する質問
-
Char型とString型
-
K&Rのp.95のgetop(char s[])
-
アルファベットの出て来た回数
-
Cで二次元配列の読み込み
-
プログラムによく出てくるst...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムによく出てくるst...
-
nullと""、\\0とEOFの違いにつ...
-
TCL言語で文字列検索方法を教え...
-
C#でstringをポインタとして渡す
-
C++で入力した文字列から数字を...
-
%dなどの違い
-
WSH(VBS)でJSONの文字列を読み...
-
16進数を2文字ずつ配列に格納し...
-
シリアル通信で0x00を送信した...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
構造体→文字列→構造体 をする方法
-
VBA-DLLの引数受け渡しについて
-
[C++]WCHARの1文字目しか表示で...
-
数字の入った配列をファイルへ...
-
VB6.0でのバイナリデータの扱い...
-
引用符と二重引用符
-
こんなことって可能なのですか...
-
char型配列の最大要素数
-
sprintf関数について教えて下さ...
-
C言語の課題で困っています;
おすすめ情報