文字コード変換

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大熊
記事: 45
登録日時: 2年前

文字コード変換

#1

投稿記事 by 大熊 » 2年前

以下の実行結果1〜3 のように, 標準入力 (キーボード) から 1 文字入力すると, 入力した文字とその文字に対応する文字コードを表示するプログラムを作成したいです。.
ただし, 以下の条件を全て満たすこと.
- 文字の入力には, scanf または getchar 関数 を使用すること.

※ 標準入力を与えるには 実行後, 「文字入力>」の後にキーボードから文字を打ち込んで Enter キーを押す.



実行結果1
文字入力> T
T の 文字コードは 84 です


実行結果2
文字入力> D
D の 文字コードは 68 です


実行結果3
文字入力> U
U の 文字コードは 85 です
入力した文字を文字コードにする方法をお教えください。

コード:

#include <stdio.h>

int main(void)
{char a;
printf("文字入力>");
scanf("%c",&a);
printf("%cの文字コードは",a);

    return 0;
}

box
記事: 2002
登録日時: 13年前

Re: 文字コード変換

#2

投稿記事 by box » 2年前

よかったら使ってください。
ソースコードはちゃんと字下げしましょうね。

コード:

#include <stdio.h>

int main(void)
{
    int c;

    printf("文字入力> ");
    scanf("%c", &c);
    printf("%c の文字コードは %d です。\n", c, c);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 文字コード変換

#3

投稿記事 by みけCAT » 2年前

box さんが書きました:
2年前
よかったら使ってください。
ソースコードはちゃんと字下げしましょうね。

コード:

#include <stdio.h>

int main(void)
{
    int c;

    printf("文字入力> ");
    scanf("%c", &c);
    printf("%c の文字コードは %d です。\n", c, c);
    return 0;
}
char*型のデータを要求するscanf()の書式%cに対し、int*型のデータを渡しているため、未定義動作になります。
また、提示された実行結果と比べ、「の」と「文字」の間のスペースが抜け、余計な「。」が入っています。

N1570 7.21.6.2 The fscanf function より引用:
10
(中略) If this object
does not have an appropriate type, or if the result of the conversion cannot be represented
in the object, the behavior is undefined.
c
Matches a sequence of characters of exactly the number specified by the field
width (1 if no field width is present in the directive).286)
If no l length modifier is present, the corresponding argument shall be a
pointer to the initial element of a character array large enough to accept the
sequence. No null character is added.
この記述からわかるように、scanf()の%cは「a character array」の先頭要素のポインタ、
すなわちchar*型のデータを要求します。
上の引用はfscanf()についてですが、scanf()についても同じはずです。

N1570 7.21.6.4 The scanf function より引用:
2
The scanf function is equivalent to fscanf with the argument stdin interposed
before the arguments to scanf.
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る