A.全角文字に使っている文字コードの体系は、eucコードを使ってください。
全角文字を扱うための文字コードには、大ざっぱにいえば、EUCコード、シフトJISコード(SJIS)、JISコード、Unicode(UTF-8, UTF-16)があります。C言語のプログラムを書くときは、EUCコードを使って下さい。
A.emacs でファイルを開き、下の黒い行の左端を見てください。「E」と書いてあれば、「EUCコード」が使われています。
ウインドウズで作ったテキストファイルは、大抵の場合は、シフトJISです。演習室のemacsで開くと「S(DOS)」と表示されます。
また、Webページからカットペーストをすると、JISになっていることがあります。そのときは、「J」と表示されます。
A.2とおりの方法を説明します。
emacs を使う方法 「C-x RETURN f」(コントロールキーを押しながらxを押し、コントロールキーから手を離して、リターンキーを押し、f を押す)と押すと、「Coding system for visited file(default nil):」とミニバッファに表示が出ます。そこで、「euc-jp-unix」と入力してリターンキーを押してください。
ちなみに「euc-jp-dos」などもあります。改行コードが、Unix系、Windows系、Mac系では異なるので、選択ができるようになっています。
nkf を使う方法 nkf は、ネットワーク用漢字コード変換フィルタです。詳しくは、「man nkf」により実行方法を調べて下さい。
大抵の場合は、「nkf -e < 変換元のファイル名 > 変換先のファイル名」で EUCコードに変換できます。
A.ビット演算子の「&」を使って調べます。
8ビット目が1の数は、2進数では、1000 0000 です。16進数に直すと 0x80 です。10進数に直すと 128 です。変数 x の 8ビット目を調べるには、「x & 0x80」または「x & 128」とします。その結果が 0 ならば、8ビット目が0であり、0でないならば、8ビット目は1であることが判断できます。
if( (c && 0x80) != 0 ){ 8ビット目が1のときの処理 } else { 8ビット目が1でないときの処理 }
「==0」の判定も良いのですが,間違えて「=0」とすることがあるので,「!=0」を使うほうが無難.
A. コマンドライン上で「man fgets」や「man fputs」とすると、文字(characters)や文字列(strings)の入力や出力の関数が一覧できます。
1文字の入力は int fgetc(FILE *stream)、文字列の入力は char *fgets(char *s, int size, FILE *stream) を使います。FILE *stream という変数型のところに、「stdin」と書き込めば、標準入力からの入力になります。
ただし、char *gets(char *) 関数は使ってはいけません。
A.書式を指定して出力する関数「int fprintf(FILE *stream, char *format, ...)」があります。
標準出力からの出力ならば、int printf(char *format, ...) があります。
format は 書式のことです。出力したいメッセージと変数値を埋め込む個所を書きます。
標準出力やファイルへの出力ならば、fprintf を使いますが、文字列型の変数への出力ならば、「int snprintf(char *str, size_t size, char *format, ...)」が便利です。出力文字列の長さの上限が変数 size となっています。ちなみに、size_t は unsigned int のようです(整数値を使っていれば問題ありません)。
A.メッセージの部分と変数の埋め込み部分があり、埋め込み部分は「%」で始まるラベルを使います。
入力用(scanfなど) | 出力用(printfなど) | ||
---|---|---|---|
文字 | %c | ||
文字列 | %s | ||
10進整数 | %d または %i | ||
10進正数 | %u | ||
16進整数 | %x または %X | ||
浮動小数点型 の実数 | float型 | %f | %f |
double型 | %lf | %f または %lf | |
指数型 の実数 | float型 | %e | %e |
double型 | %le | %e または %le |
例:int a; printf("りんごの数は %d 個です。",a);
例:char *s; s = "abc"; printf("%c",s[1]); ⇒ 「b」だけが表示される。
例:double x; printf("半径を入力して下さい:"); scanf("%lf", &x);
scanf のときは変数のアドレスを引数に書くこと。
埋め込み部分の表示幅(文字数)を指定するには、「%」と「変換指定」の間に数値を書きます。(例:printf("%10d\n",123) ⇒ 「 123」、空白と123の3文字をあわせて10文字)
左よせして表示するには、表示幅の手前に「-」を書きます。(例:printf("%-10d\n",123) ⇒ 「123 」)
演算子 | 名称 |
---|---|
++ -- () [] -> . | 後置インクリメント 後置デクリメント 関数引数 配列番号 構造体メンバの間接参照 構造体メンバ |
++ -- ! ~ - + & * sizeof () | 前置インクリメント 前置デクリメント 論理否定 1の補数 単項マイナス 単項プラス アドレス 間接参照 サイズ キャスト |
* / % | 乗算 除算 剰余 |
+ - | 加算 減算 |
<< >> | 左シフト 右シフト |
< <= > >= | 大小比較 |
== | 等しい |
!= | 等しくない |
& | ビット演算の論理積(and) |
^ | ビット演算の排他的論理和(xor; eor) |
| | ビット演算の論理和(or) |
&& | 論理積(and) |
|| | 論理和(or) |
?: | 条件 |
= | 代入 |
*= /= %= += -= <<= >>= &= ^= |= | 複合代入 |
, | 式の区切り |