【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21374

char型の桁数取得方法。
投稿者---初心者(2005/06/13 14:24:24)


初めて書き込みします。質問させてください。

コンソールから's'または'q'を入力させて、PGのモードを決めたいと思い
char型の変数に入力された文字を格納しています。
次に入力された文字の桁数チェックをしたいのですが、

main()
{
char mode=NULL;
int chk_len;

printf("PGモードを入力('s'or'q'):");
scanf(" %c", mode);
chk_len = 0;
chk_len = strlen(mode);
:
:

とすると、chk_len = strlen(mode);で

エラー E2342 add_test.c 38: パラメータ '__s' は const signed char * 型とし
て定義されているので int は渡せない(関数 main )

というエラーが出ました。
char型の桁数取得方法を教えてください。

以上
宜しくお願い致します。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:char型の桁数取得方法。 21375 nop 2005/06/13 14:29:42


No.21375

Re:char型の桁数取得方法。
投稿者---nop(2005/06/13 14:29:42)


>次に入力された文字の桁数チェックをしたいのですが、

「文字の桁数」とはどういう値ですか?
「文字」には桁がないはずです。


>char mode=NULL;
>scanf(" %c", mode);
>chk_len = 0;
>chk_len = strlen(mode);

strlen() は、「文字列」の文字数をカウントする関数です。
strlen() には、「'\0'」で終端された文字列を渡して下さい。


この投稿にコメントする

削除パスワード

No.21377

Re:char型の桁数取得方法。
投稿者---初心者(2005/06/13 14:38:34)


返信ありがとうございます。

>「文字の桁数」とはどういう値ですか?
>「文字」には桁がないはずです。

その通りです。すいません。
もしコンソールから2文字以上入力があった場合のために
桁数チェックで誤作動を回避したいと思ったのですが、
その処理を行いたい時は入力された文字を受け取る変数を
文字列で宣言すべきですか?


この投稿にコメントする

削除パスワード

No.21390

Re:char型の桁数取得方法。
投稿者---円零(2005/06/13 21:54:24)


「誤作動を回避したい」だけでは何をどう回避したいのか良くわかりませんが、
目的が「入力が"q"や"s"一文字のときのみ通したいが、scanf("%c"...では
最初の文字が一致するだけの入力、例えば"quick"なども通してしまうため、
そうした入力もはじくようにしたい」ということであれば、
別に文字数を取得する必要はありませんし、文字列の比較でも文字の比較でもどっちでもいけますよ。

文字列の場合、fgetsで読んで"s\n"または"q\n"と比較すればいいですし、
文字の場合、まずscanfして、一文字目が'\n'じゃなかったらもう一回scanfして、
二文字目が'\n'じゃない場合にははじくようにすれば良い。

標準入力のバッファに残るのを消したいと言うことであれば、
scanfの%*[^\n]で読み捨てたりとか%cで'\n'にあたるまでループで回したりとか。
つまり、

#include <stdio.h>

int main(void){
    char str[3], mode = '\0';

    printf("PGモードを入力('s'or'q'):");
    fgets(str, 3, stdin);
    if( !(strcmp(str, "q\n") && strcmp(str, "s\n")) ) mode = str[0];
    printf("mode = %02x(%c)", mode, mode);
    if( str[0] != '\n' && str[1] != '\n') scanf("%*[^\n]%*c");
    return 0;
}

であるとか、
#include <stdio.h>

int main(void){
    char c, mode;

    printf("PGモードを入力('s'or'q'):");
    scanf("%c", &mode);
    if( mode == '\n' ) mode = '\0';
    else{
        scanf("%c", &c);
        if( c != '\n' ) mode = '\0';
        while( c != '\n') scanf("%c", &c);
    }
    if( mode !='q' && mode != 's') mode = '\0';
    printf("mode = %02x(%c)", mode, mode);
    return 0;
}

のように(斜字体は読み捨て処理の部分)。

それと、NULLはNULLポインタの値ですから、
char型の変数modeをNULLで初期化するのは間違っています。
終端文字は'\0'と書きます。
また、読み取った値を入れるためにscanfに渡す引数はポインタ型でなくてはいけません。
scanf(" %c", mode);ではなくscanf(" %c", &mode);としてください。


この投稿にコメントする

削除パスワード

No.21443

Re:char型の桁数取得方法。
投稿者---初心者(2005/06/14 15:09:40)


返信ありがとうございます。遅くなってすみません。

できました!感動しました!
if( str[0] != '\n' && str[1] != '\n') scanf("%*[^\n]%*c");
を使わせていただきました。

入力が1文字でなければはじくと考えていたので、桁数が必要と思っていたのですが
2文字目が"\n"でないと考えればよかったのですね。
ありがとうございます。

>それと、NULLはNULLポインタの値ですから、
>char型の変数modeをNULLで初期化するのは間違っています。
>終端文字は'\0'と書きます。
>また、読み取った値を入れるためにscanfに渡す引数はポインタ型でなくてはいけません。
>scanf(" %c", mode);ではなくscanf(" %c", &mode);としてください。

基本的なところが間違っていてすみません。
気をつけていきたいと思います。
ありがとうございました。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧