パスワードをランダムで作る。パスワードは,英字(大文字・小文字)と数字の組み合わせで作らなければならない。
パスワードの文字数は,6桁から10桁である。
パスワードの文字数 n と,配布する対象者の人数 m とを入力すると,
ランダムに作ったn桁のパスワードをm人分,1行に1個ずつ標準出力に出力してくれる
プログラムを作ってほしい。
このとき,m人分のパスワードに同じものがあってはならない。
プログラムは,n と m を引数とする実行指令を標準入力から与える形のもので
差し支えない。
というプログラムを作りたいのですが、どのような方針を立てて作ればよいでしょうか?
ご指南お願いします。
パスワード生成
Re: パスワード生成
方針?というより、私の考え方ですが、ゆいー さんが書きました:どのような方針を立てて作ればよいでしょうか?
1 使える文字をすべて、配列に入れる。
2 乱数で、その配列からn文字取って、パスワードを作る。
3 すでに作成されたパスワードかチェックする。
4 m個作る。
すでに作ったパスワードはリストか配列に入れていきます。
non
Re: パスワード生成
じぶんで試しに作ってみたんですが、
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define rnd(n) (int)(n * (rand() / (RAND_MAX + 1.0)))
char *pass(char *s, size_t n)
{
const char *const a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYG0123456789";
size_t i;
-- n;
for(i = 0; i < n; ++ i) s = a[rnd(62)];
s = '\0';
return s;
}
int main(int argc, char *argv[])
{
int A, B, j;
A= atoi(argv[1]);
B= atoi(argv[2]);
for(j=0; j<B; j++){
char s[A];
srand((unsigned)time(NULL));
puts(pass(s, sizeof s));
}
return 0;
}
以下のように作ったんですが
実行すると./a.out 6 5
m1ugl
m1ugl
m1ugl
m1ugl
m1ugl
のようになってしまい、一つランダムでつくった数値を5個表示するようになってしまいました。
どうかえれば1個1個ランダムで表示できるようになるでしょうか?
お願いします。今回桁数をA,人数をBとしました。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define rnd(n) (int)(n * (rand() / (RAND_MAX + 1.0)))
char *pass(char *s, size_t n)
{
const char *const a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYG0123456789";
size_t i;
-- n;
for(i = 0; i < n; ++ i) s = a[rnd(62)];
s = '\0';
return s;
}
int main(int argc, char *argv[])
{
int A, B, j;
A= atoi(argv[1]);
B= atoi(argv[2]);
for(j=0; j<B; j++){
char s[A];
srand((unsigned)time(NULL));
puts(pass(s, sizeof s));
}
return 0;
}
以下のように作ったんですが
実行すると./a.out 6 5
m1ugl
m1ugl
m1ugl
m1ugl
m1ugl
のようになってしまい、一つランダムでつくった数値を5個表示するようになってしまいました。
どうかえれば1個1個ランダムで表示できるようになるでしょうか?
お願いします。今回桁数をA,人数をBとしました。
Re: パスワード生成
srand((unsigned)time(NULL));
は最初に1回だけやれば良い。forの前に移動のこと。
コードはタグで括ってください。
方法
コードを貼り付けたら、コードをドラッグして選択する。
投稿画面の上にある、-コード- と書かれているコンボボックスをクリックし、cかc++を選択する。
以上
は最初に1回だけやれば良い。forの前に移動のこと。
コードはタグで括ってください。
方法
コードを貼り付けたら、コードをドラッグして選択する。
投稿画面の上にある、-コード- と書かれているコンボボックスをクリックし、cかc++を選択する。
以上
non
Re: パスワード生成
何だか1文字足りないような気がします。
あと、argcの値をチェックしてからargv[]を参照する必要がありそうです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: パスワード生成
pass関数の中でbox さんが書きました: 何だか1文字足りないような気がします。
あと、argcの値をチェックしてからargv[]を参照する必要がありそうです。
--n
としているので,1文字足りないのは仕様だと思います.
Re: パスワード生成
だとすると、その仕様は間違っていると思います。beatle さんが書きました: pass関数の中で
--n
としているので,1文字足りないのは仕様だと思います.
m1ugl
は、ふつう5文字とカウントすると思います。
ところが、質問者さんの実行画面では、「6文字の」パスワードを生成しようとしています。
この食い違いを、論理的にどう説明すればいいのでしょうか。私には説明できません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。