パスワードジェネレータを作成しようとしています。私が最後に主な機能を繰り返そうとするまで、すべてがスムーズに進んでいました。コードは次のようになります:プログラムを終了せずにmain()関数を繰り返すには?
私はコードのフィードバックをいただければ幸いです。私はまだ学習しています(いつでも学習を止めますか?)できるだけ早くできるように改善したいと思います。
// 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;
}
}
...あなたはサブルーチンことを確認する必要があり、かつ「メイン」ときに、ユーザーの種類Y. –
あなたからそれを呼び出します'main'関数を*繰り返さない*あなたは*呼び出しています。再帰的に 'main'を呼び出すことは合法ですが、一般的にはあまり推奨されません。あなたは何がうまくいかなかったか教えてくれませんでした。その情報をあなたの質問に含める必要があります。コンパイル時にエラーメッセージが表示されましたか?プログラムが間違った出力を生成しましたか?そして、あなたの目標は、再帰的な呼び出しよりも、ループによってほぼ確実に満たされるでしょう。 –
あなたの直面した問題(他の場所で解決されているはずです)は、 'scanf("%d "、...)'に応答して数字を入力してからEnterを押しました。この数字は 'scanf'呼び出しによって消費され、Enter(' '\ n''')は次の 'scanf("%c "、...)'によって消費されます。 stdinから数値を読み込みたい場合は、その数値を読み込み、次の入力を破棄して次の '\ n'まで含めなければなりません。 –