我有一些從學校練習在C練習,我從昨天開始一直在努力,但我一直對特定的一個很僵硬。C:字符串「吃」的循環(也許)
在這個程序中,它必須被重複最多5次,直到用戶沒有回答「安全問題」:
用戶必須要問3次上衣輸入密碼(初始「ABC123」 ),如果用戶不知道密碼,他必須回答一個安全問題(「你最喜歡的顏色是什麼?」,答案是「無」)2次。如果他/她沒有正確回答,它應該顯示「Acound locked」。並且循環應該終止,或者如果他/她知道安全問題的答案,那麼他/她鍵入一個新的密碼,該密碼應該適用於其餘的循環。
但似乎字符串以某種方式「吃」了一些循環。我使用了getchar(),但它似乎沒有任何效果。另外,我認爲我犯了一個大錯誤 - 而這需要重複5次。
我做錯了什麼?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char temp[7];
char CODE[7] = "abc123";
char pin[7];
char safepin[7];
char newpin[7];
int i=0, p=0, k=0;
int main()
{
do{
do{
printf("GIVE PASSWORD:\n");
scanf("%s", pin);
i++;
} while (i<3 && strcmp (pin, CODE) != 0);
if (strcmp(pin, CODE) == 0)
printf("W E L C O M E !\n");
else
{
do{
printf("What's your favourite colour?\n");
scanf("%s", safepin);
p++;
} while (p<2 && strcmp (safepin, "none") != 0);
if (strcmp(safepin, "none") == 0)
{
printf("Type a new password:\n");
scanf("%s", newpin);
strcpy(temp, newpin);
strcpy(CODE, temp);
main();
}
else
printf("Account Locked\n");
}
printf("***************\n\n");
k++;
}while(k<5);
system("pause");
return 0;
}
UPDATE:
我修改了代碼一點,由於反應(你無不驚歎)和它的作品就像一個魅力,只好像當你有正確的答案最終像,它始終保持打印(提供密碼),由於第一次轉到檢查點,而不是5次打印。有任何想法嗎?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char temp[7];
char CODE[7] = "abc123";
char pin[7];
char safepin[7];
char newpin[7];
int i=0, p=0, k=0;
int verified = 0;
i = 0;
k = 0;
CHECKPOINT:
do{
do{
printf("GIVE PASSWORD:\n");
scanf("%s", pin);
i++;
} while (i<3 && strcmp (pin, CODE) != 0);
if (strcmp(pin, CODE) == 0){
printf("W E L C O M E !\n");
verified = 1;
goto CHECKPOINT;
}
else
{
p = 0;
do{
printf("What's your favourite colour?\n");
scanf("%s", safepin);
p++;
} while (p<2 && strcmp (safepin, "none") != 0);
if (strcmp(safepin, "none") == 0)
{
printf("Type a new password:\n");
scanf("%s", newpin);
strcpy(temp, newpin);
strcpy(CODE, temp);
strcpy(pin, CODE);
goto CHECKPOINT;
}
else
{
printf("Account locked.\n");
verified = 1;
}
}
printf("***************\n\n");
k++;
}while(k<5 && !verified);
system("pause");
return 0;
}
所以當用戶鍵入他的新密碼後,立即在程序要求他給出密碼後。由於密碼已更改,用戶所做的密碼應該工作,然後顯示「W E L C O M E!」 – Coursal
我注意到你將要改變的任務之一就是使用全局變量來處理例程中本地的事物。如果您稍後將main更改爲authenticate_user之類的函數,則這些變量在重用時不會重新初始化,而更糟糕的是會保留敏感信息,這些信息會持續存在於過程中,並可用於程序的其餘部分或知道如何檢查的窺探者正在運行的進程的地址空間。 –
當你說這些字符串看起來像是在「吃」你的循環時,你究竟是什麼意思? –