パスワード生成

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆいー

パスワード生成

#1

投稿記事 by ゆいー » 13年前

パスワードをランダムで作る。パスワードは,英字(大文字・小文字)と数字の組み合わせで作らなければならない。
 パスワードの文字数は,6桁から10桁である。
 パスワードの文字数 n と,配布する対象者の人数 m とを入力すると,
 ランダムに作ったn桁のパスワードをm人分,1行に1個ずつ標準出力に出力してくれる
 プログラムを作ってほしい。

 このとき,m人分のパスワードに同じものがあってはならない。
 プログラムは,n と m を引数とする実行指令を標準入力から与える形のもので
 差し支えない。

というプログラムを作りたいのですが、どのような方針を立てて作ればよいでしょうか?
ご指南お願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: パスワード生成

#2

投稿記事 by みけCAT » 13年前

課題のような雰囲気ですが?
丸投げは禁止されています。
フォーラムルールをお読みください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

non
記事: 1097
登録日時: 14年前

Re: パスワード生成

#3

投稿記事 by non » 13年前

ゆいー さんが書きました:どのような方針を立てて作ればよいでしょうか?
方針?というより、私の考え方ですが、

1 使える文字をすべて、配列に入れる。
2 乱数で、その配列からn文字取って、パスワードを作る。
3 すでに作成されたパスワードかチェックする。
4 m個作る。

すでに作ったパスワードはリストか配列に入れていきます。
non

ゆいー

Re: パスワード生成

#4

投稿記事 by ゆいー » 13年前

じぶんで試しに作ってみたんですが、

#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としました。

non
記事: 1097
登録日時: 14年前

Re: パスワード生成

#5

投稿記事 by non » 13年前

srand((unsigned)time(NULL));
は最初に1回だけやれば良い。forの前に移動のこと。

コードはタグで括ってください。

方法
コードを貼り付けたら、コードをドラッグして選択する。
投稿画面の上にある、-コード- と書かれているコンボボックスをクリックし、cかc++を選択する。
以上
non

box
記事: 2002
登録日時: 14年前

Re: パスワード生成

#6

投稿記事 by box » 13年前

ゆいー さんが書きました:

コード:

    A= atoi(argv[1]);
    char s[A];
実行すると./a.out 6 5
m1ugl
何だか1文字足りないような気がします。

あと、argcの値をチェックしてからargv[]を参照する必要がありそうです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: パスワード生成

#7

投稿記事 by beatle » 13年前

box さんが書きました: 何だか1文字足りないような気がします。

あと、argcの値をチェックしてからargv[]を参照する必要がありそうです。
pass関数の中で
--n
としているので,1文字足りないのは仕様だと思います.

box
記事: 2002
登録日時: 14年前

Re: パスワード生成

#8

投稿記事 by box » 13年前

beatle さんが書きました: pass関数の中で
--n
としているので,1文字足りないのは仕様だと思います.
だとすると、その仕様は間違っていると思います。
m1ugl
は、ふつう5文字とカウントすると思います。
ところが、質問者さんの実行画面では、「6文字の」パスワードを生成しようとしています。
この食い違いを、論理的にどう説明すればいいのでしょうか。私には説明できません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る