ページ 11

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

Posted: 2015年2月05日(木) 23:09
by まるまか
質問です。
パスワードを入力させて文字を表示する形式のコンソールプログラムを作りたいのですが、
以下の文だとパスワードが認識されず(パスワードを入力しても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に行ってしまいます。
どうしてでしょうか、教えていただければ幸いです。

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

Posted: 2015年2月05日(木) 23:13
by みけCAT
C言語のchar型には1文字しか格納できません。
0123は8進数で、十進数に直すと83、十六進数に直すと53なので、
"S" (引用符は入力しない)と入力すると「パスワードが認識」されるはずです。

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

Posted: 2015年2月05日(木) 23:17
by みけ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;
}

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

Posted: 2015年2月06日(金) 23:48
by まるまか
みけ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;
}
上のコードで解決しました。
プログラミング初心者(半年未満)なので、
上の文を少しづつわかっていきたいと思います。

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