好吧,我已经让这个程序检查密码了。如果我将第二个数组(即for循环)设置为8位数,它可以正常工作。但是一旦pw需要超过8位数,整个事情就会出错(因为for循环会有10位数字)。
我认为将第一个数组声明为MAXLINE long会起作用,但它似乎无法解决问题。
/* IMPORT ---------------------- */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* CONST------------------ */
#define MAXDIGIT 10000
/* VARIABLES (global) ---------- */
/* MAIN--------------- */
int main()
{
/* VARIABLES (local) --------- */
/* VARIABLES (local) --------- */
// ENTERED PW:
char EnterCode[MAXDIGIT];
int i;
// REAL PW:
char arr[MAXDIGIT] = "123456789"; //"YKJ98LGDDF";
int j;
printf("PW: "); // for testing
for (j = 0 ; j < 8; ++j){
printf("%c", arr[j]);
}
/* Intro --------------------- */
printf("\nPlease enter code of authorization: ");
for(i = 0; i < 10; ++i){
scanf("%c", &EnterCode[i]);
printf("%c", EnterCode[i]); // test 1
}
if (strcmp(EnterCode,arr) == 0){
printf("\nAccess authorized.\n");
}else{
printf("\nAccess denied!\n");
}
system("PAUSE");
return 0;
}
答案 0 :(得分:1)
虽然您 将scanf置于循环中 ,但您没有需要在您的应用程序中执行此操作:
如果要在字符串中捕获密码,只需声明合理的长度字符串,使用它在一次调用中读取用户的输入:
char EnterCode[20];//20 is just for illustration, pick any reasonable length for your application
printf("enter your passcode:\n");
scanf("%19s", EnterCode); //limit characters read to 19 (leaving room for terminating NULL)
对于特别长的密码 ,
而不是在堆栈上创建内存:
#define MAXDIGIT 10000
char EnterCode[MAXDIGIT];//uses a large block of memory from a limited source
将它放在堆上:
char *EnterCode = {0};
EnterCode = malloc(MAXDIGIT); //also uses a large block of memory, but from a much much larger source
完成使用EnterCode后,释放内存:
free(EnterCode);
答案 1 :(得分:0)
在C语言字符串中以&#39; \ 0&#39;。
结束因此,您的密码应为&#34; 123456789&#34;进入&#34; EnterCode&#34; 设置EnterCode [10] =&#39; \ 0&#39; (在你的代码中)。
答案 2 :(得分:0)
替换
for(i = 0; i < 10; ++i){
scanf("%c", &EnterCode[i]);
printf("%c", EnterCode[i]); // test 1
}
与
scanf("%s", EnterCode);
再试一次。