如何在不关闭程序的情况下重复main()函数?

时间:2017-06-12 18:58:40

标签: c

我正在尝试制作密码生成器。一切顺利,直到我试图在最后重复主要功能。代码如下:

我也很感激有关代码的反馈。我还在学习(我们什么时候停止学习?)我希望尽可能快地提高自己的能力。

// 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;
        }
}

2 个答案:

答案 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);