我正在尝试制作密码生成器。一切顺利,直到我试图在最后重复主要功能。代码如下:
我也很感激有关代码的反馈。我还在学习(我们什么时候停止学习?)我希望尽可能快地提高自己的能力。
// password generator
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main ()
{
char answer;
int c=0;
int passlength;
char randLWUPchar; // lowercase, uppercase, characters + numbers
srand(time(NULL)); // seeding function
printf("Type the wished password length:");
scanf("%d", &passlength);
while(c < passlength){
randLWUPchar = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM"[rand () % 65];
printf("%c", randLWUPchar);
c++;
}
printf("\n\n\t\t...if it fails to prompt as wished, please restart...\n");
printf("\n\n\t\t Please select Y to restart or N to close");
scanf("%c", &answer);
if (answer == 'Y'){
return main();
}
else if (answer == 'N'){
return EXIT_SUCCESS;
}
}
答案 0 :(得分:2)
我建议重构你的函数以不使用递归。
对于完全爆炸的优化器,这个尾调用应该很容易优化,但你不应该依赖于优化器。改为使用循环。
尝试类似:
do
{
// your code
} while(answer == 'Y');
return ERROR_SUCCESS;
答案 1 :(得分:1)
与评论中的内容相反,是的,您的main()
可以是递归的。
正如@Keith Thompson所提到的,您必须在阅读'\n'
后清空passlength
。例如:
scanf("%d", &passlength);
fgetc(stdin);
然后
scanf("%c", &answer);
fgetc(stdin);