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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムによく出てくるst...
-
構造体→文字列→構造体 をする方法
-
WSH(VBS)でJSONの文字列を読み...
-
VB6.0でのバイナリデータの扱い...
-
C言語 文字列 比較に関する質問
-
c言語によって文字列を逆順する...
-
C++で入力した文字列から数字を...
-
sprintf関数について教えて下さ...
-
エクセルVBAで部分検索でのアラ...
-
#include <stdio.h> int main(v...
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
配列で格納したものをmsgboxで...
-
C言語のintとcharの違いってな...
-
C言語で特定列だけを抽出して配...
-
fopne で失敗する原因
-
Integer変数をカラにしたいので...
-
VBA基本構文の作り方 2列の...
-
VBAのプログラムで、DIAG = 1# ...
-
あるディレクトリ内のファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
nullと""、\\0とEOFの違いにつ...
-
プログラムによく出てくるst...
-
TCL言語で文字列検索方法を教え...
-
C++で入力した文字列から数字を...
-
%dなどの違い
-
WSH(VBS)でJSONの文字列を読み...
-
VB6.0でのバイナリデータの扱い...
-
16進数を2文字ずつ配列に格納し...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
C#でstringをポインタとして渡す
-
シリアル通信で0x00を送信した...
-
char型配列の最大要素数
-
構造体→文字列→構造体 をする方法
-
VBA-DLLの引数受け渡しについて
-
数字の入った配列をファイルへ...
-
Shift_JIS(16進)を文字に変換す...
-
文字コードによる表記
-
引用符と二重引用符
-
C言語の勉強しています。すみま...
-
アルファベットの出て来た回数
おすすめ情報