ページ 1 / 1
パスワード入力(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;
}
上のコードで解決しました。
プログラミング初心者(半年未満)なので、
上の文を少しづつわかっていきたいと思います。
本当にありがとうございました。