パスワード入力(if分岐)とコンソールプログラムについて

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

パスワード入力(if分岐)とコンソールプログラムについて

#1

投稿記事 by まるまか » 11年前

質問です。
パスワードを入力させて文字を表示する形式のコンソールプログラムを作りたいのですが、
以下の文だとパスワードが認識されず(パスワードを入力してもelse文に行ってしまう)困っています。

コード:

#include <stdio.h>

int main()
{
        char PassInput;
		char PASS1 = 0123; 

        printf("パスワードを入力してください\n");
        scanf("%c",&PassInput);

        if (PassInput == PASS1) printf("パスワード認識しました");
        else printf("パスワードが違います");

        return 0;
}
OS:win8.1
VC++2010 Expressで制作しています。

コンパイルは成功しています。
0123を入力してもelseに行ってしまいます。
どうしてでしょうか、教えていただければ幸いです。

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

Re: パスワード入力(if分岐)とコンソールプログラムについて

#2

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

C言語のchar型には1文字しか格納できません。
0123は8進数で、十進数に直すと83、十六進数に直すと53なので、
"S" (引用符は入力しない)と入力すると「パスワードが認識」されるはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: パスワード入力(if分岐)とコンソールプログラムについて

#3

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

やりたいのはこういうことでしょうか?

コード:

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

/* 標準入力から1行読み込み、最初の最大でbufferSize-1文字をbufferに格納する */
void readPass(char *buffer, size_t bufferSize)
{
        size_t readLength = 0;
        for (;;)
        {
                int input = getchar();
                if (input == EOF || input == '\n') break;
                buffer[readLength] = input;
                if (readLength + 1 < bufferSize) readLength++;
        }
        buffer[readLength] = 0;
}

int main(void)
{
        char PassInput[16];
        char PASS1[] = "0123";

        printf("パスワードを入力してください\n");
        readPass(PassInput, sizeof(PassInput) / sizeof(PassInput[0]));

        if (strcmp(PassInput, PASS1) == 0) printf("パスワード認識しました");
        else printf("パスワードが違います");

        return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

まるまか

Re: パスワード入力(if分岐)とコンソールプログラムについて

#4

投稿記事 by まるまか » 11年前

みけCAT さんが書きました:C言語のchar型には1文字しか格納できません。
0123は8進数で、十進数に直すと83、十六進数に直すと53なので、
"S" (引用符は入力しない)と入力すると「パスワードが認識」されるはずです。
みけCAT さんが書きました:やりたいのはこういうことでしょうか?

コード:

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

/* 標準入力から1行読み込み、最初の最大でbufferSize-1文字をbufferに格納する */
void readPass(char *buffer, size_t bufferSize)
{
        size_t readLength = 0;
        for (;;)
        {
                int input = getchar();
                if (input == EOF || input == '\n') break;
                buffer[readLength] = input;
                if (readLength + 1 < bufferSize) readLength++;
        }
        buffer[readLength] = 0;
}

int main(void)
{
        char PassInput[16];
        char PASS1[] = "0123";

        printf("パスワードを入力してください\n");
        readPass(PassInput, sizeof(PassInput) / sizeof(PassInput[0]));

        if (strcmp(PassInput, PASS1) == 0) printf("パスワード認識しました");
        else printf("パスワードが違います");

        return 0;
}
上のコードで解決しました。
プログラミング初心者(半年未満)なので、
上の文を少しづつわかっていきたいと思います。

本当にありがとうございました。

閉鎖

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