以下に貼り付けたコードに問題があり、実行時にハングします。VS2010 では、警告やエラーは表示されません。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void clear_buffer(void)
{
while(getchar() != '\n');
}
int validate(int low, int high) {
int num;
scanf("%d", &num);
while(num < low || num > high)
{
clear_buffer();
printf("INVALID! Must enter value between %d and %d: ", low, high);
scanf("%d", &num);
}
return num;
}
int getRand(int max) {
int number;
number = rand() % max + 1;
return number;
}
int validatePick(int pick, int one, int two, int three, int four, int five) {
int valid = 0;
if (pick != one && pick != two && pick != three && pick != four && pick != five) {
valid = 1;
} else {
valid = 0;
}
return valid;
}
void prnt(int qty, int one, int two, int three, int four, int five, int six) {
int i = 0, flag = 0;
while (flag != 2) {
flag = 0;
if (sort2(&one, &two) == 0 && sort2(&three, &four) == 0 && sort2(&five, &six) == 0)
flag = 1;
if (sort2(&two, &three) == 0 && sort2(&four, &five) == 0)
flag = 1;
flag += flag;
}
printf("Picks: %d, ", one);
while (i <= qty){
if (i== 2 && qty == 2)
printf("%d\n", two);
else if (i == 2 && qty != 2)
printf("%d, ", two);
if (i == 3 && qty == 3)
printf("%d\n", three);
else if (i == 3 && qty != 3)
printf("%d, ", three);
if (i == 4 && qty == 4)
printf("%d\n", four);
else if (i == 4 && qty != 4)
printf("%d, ", four);
if (i == 5 && qty == 5)
printf("%d\n", five);
else if (i == 5 && qty != 5)
printf("%d, ", five);
if (i == 6 && qty == 6)
printf("%d\n", six);
i++;
}
}
int sort2(int *n1, int *n2) {
int tmp, valid = 0;
if (*n1 > *n2)
{
tmp = *n2;
*n2 = *n1;
*n1 = tmp;
valid = 1;
}
return valid;
}
int main () {
int num1, num2;
int pick, one = 0, two = 0, three = 0, four = 0, five = 0, six = 0;
srand(time(NULL));
printf("LOTTERY GENERATOR\n");
printf("Enter the maximum value between 1 and 100: ");
num1 = validate(2,100);
printf("Enter quantity of numbers to pick, between 1 and 6: ");
num2 = validate(1, 6);
one = getRand(num1);
while (two == 0 || three == 0 || four == 0 || five == 0 || six == 0) {
pick = getRand(num1);
if (validatePick(pick, one, two, three, four, five) == 1 && two == 0)
two = pick;
else if (validatePick(pick, one, two, three, four, five) == 1 && three == 0)
three = pick;
else if (validatePick(pick, one, two, three, four, five) == 1 && four == 0)
four = pick;
else if (validatePick(pick, one, two, three, four, five) == 1 && five == 0)
five = pick;
else if (validatePick(pick, one, two, three, four, five) == 1)
six = pick;
}
prnt(num2, one, two, three, four, five, six);
}
3 と入力してEnter the maximum value between 1 and 100
から 2 と入力すると、プログラムがハングします。なぜそんなことをするのか理解できません。コードにエラーはありません。何か案は?