文字列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
勘太郎

文字列

#1

投稿記事 by 勘太郎 » 16年前

こんにちは。
C言語は初心者です。コンパイラはBorland C++を使っています。

次のプログラムは一文字ずつ表示して一文字ずつ消去していくプログラムです。
「あいうえお」と入力したところ、一文字ずつ表示され、一文字ずつ消えていきました。
入力した文字列はそれぞれ2バイトずつ取り、全部で11バイトですよね。
そこで質問なのですが、
入力された「あ」はchar[0]とchar[1]に入りますよね?
for (i = 0; i < strnum; i++) {
putchar(str);
fflush(stdout);
sleep(500);
}
ここで、char[0]が強制的に出力されますよね。でも、char[0]だけなのに、どうして、実行したときには
「あ」が表示されたのですか?

よろしくお願いします。


#include <stdio.h>
#include <time.h>
#include <string.h>

int sleep(unsigned long x);

void main()
{
    int i;
    char str[100];
    int strnum;
	
    printf("文字列を入力してください:");
    gets(str);
	
    strnum = strlen(str);
    printf("%d\n", strnum);

    while (1) {
	for (i = 0; i < strnum; i++) {
	    putchar(str);
	    fflush(stdout);
	    sleep(500);
	}
		
	for (i = 0; i < strnum; i++) {
	    printf("\b \b");
	    fflush(stdout);
	    sleep(500);
	}
    }
}

int sleep(unsigned long x)
{
    clock_t c1 = clock(), c2;
	
    do {
        if ((c2 = clock()) == (clock_t)-1) {
	    return (0);
        }
    } while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x);
    return (1);
}

non

Re:文字列

#2

投稿記事 by non » 16年前

シフトJIS漢字コードの1バイト目は、半角文字の範囲にならないようにしてあります。
したがって、1バイト目だけがテキストRAMに書き込まれても何も表示されず、2バイト目が
書き込まれた瞬間に漢字が表示されていると思います。また、消していく場合も、2バイト目を
空白(0x20)にしたとき、JIS漢字コードの2バイト目が0x20は漢字が割り当てられていないので
1バイト目+0x20では漢字にならず、空白になるのではないでしょうか。

toyo

Re:文字列

#3

投稿記事 by toyo » 16年前

「あ」が表示されるのはiが1になってstr[1]まで出力されたときですよ
putchar(str[0]);
fflush(stdout);
だけだと何も表示されないと思います

勘太郎

Re:文字列

#4

投稿記事 by 勘太郎 » 16年前

non様、toyo様回答ありがとうございます。

一バイト目だけじゃなくて、二バイト目になって、初めて表示できるのですね。
だから、一文字消すのに半角文字の2倍かかっているのですね。
ありがとうございました。

閉鎖

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