C言語でランダムでパスワードを作成するプログラムを作っています。
大文字と小文字のアルファベットと数字の中から二つ組み合わせるて、指定された数が出力されるものです。
例)英数字と小文字
どれを組み合わせますか?
1:英小文字
2:英大文字
3:数字
(例:1,2)
:1,2
何桁ですか?
:10
JjdwghceAy
・1=もう一回
・2=終了
:
とゆうような流れです。
困っていることは組み合わせるときに、範囲外が指定された時です。範囲外が指定されたら、もう一度入力させるつもりなんですが、なぜかそのまま次の桁を入力するところに流れてしまうのです。当然何も入らないので何も出できません(たまに文字が出力されます)。
条件式が間違ってるのでしょうか?
C
1int plural_number(void) //英文字と数字 2{ 3 char number[10]="0123456789"; 4 char small_alphabet[27]="abcdefghijklmnopqrstuvwxyz"; 5 char big_alphabet[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 6 char combination[37]; 7 int figure,i,select1,select2; 8 srand((unsigned int)time(NULL)); 9 printf("\n***英文字と数字***"); 10 do{ 11 printf("\nどれを組み合わせますか?\n"); 12 printf(" 1:英小文字\n 2:英大文字\n 3:数字\n (例:1,2)\n :"); 13 scanf("%d,%d",&select1,&select2); 14 if(select1==1 && select2==2 || select1==2 && select2==1){ 15 strcpy(combination,small_alphabet); 16 strcat(combination,big_alphabet); 17 } 18 else if(select1==1 && select2==3 || select1==3 && select2==1){ 19 strcpy(combination,small_alphabet); 20 strcat(combination,number); 21 } 22 else if(select1==2 && select2==3 || select1==3 && select2==2){ 23 strcpy(combination,big_alphabet); 24 strcat(combination,number); 25 } 26 else{ 27 printf("error\n"); 28 continue; 29// plural_number(); 範囲外が入力されたら強引に戻す 30 } 31 }while(select1<1 || select1>4 && select2<1 || select2>4); //ここ? 32 do{ 33 printf("\n何桁ですか?(4~20)\n :"); 34 scanf("%d",&figure); 35 printf("\n "); 36 if(figure>=4 && figure<=20){ 37 for(i=0;i<figure;i++){ 38 for(i=0;i<=SHFE;i++) 39 swap(combination,rand()%36,rand()%36); 40 combination[figure]=NULL; 41 printf("%s",combination); 42 } 43 } 44 else{ 45 printf("\n "); 46 printf("Error\n"); 47 } 48 }while(figure<4 || figure>20); 49 printf("\n\n"); 50 menu(); 51 return 0; 52} 53 54void swap(char *num,int x,int y) //並び替え 55{ 56 char tmp; 57 tmp = num[x]; 58 num[x] = num[y]; 59 num[y] = tmp; 60}
いろいろ試したのですがうまくいきませんでした。お願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
bcpadを使用しています
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/06 01:25