В колледже у меня было задание: взять в качестве входных данных два числа и использовать грубую силу, чтобы получить их отдельные делители, сохранить их в массивах и затем распечатать.После чего нас попросили получить их общие делители, используя сравнение между двумя массивами, и создать массив, который содержал общие делители, и затем распечатать их.
Код ниже работал просто отлично
int main() {
int n1, n2, i, j, n, k, l, m, u, h, test ;
int divisors1[100] ;
int divisors2[100] ;
int common_div[100] ;
int up_limit, low_limit ;
printf("Enter an integer") ;
scanf("%d", &n1) ;
printf("Enter an integer") ;
scanf("%d", &n2) ;
for(i = 1, j = 0, k = 0; i <= n ; i++){
if(n1 % i == 0){
divisors1[j] = i ;
j++ ;
}
if(n2 % i == 0){
divisors2[k] = i ;
k++ ;
}
}
// printf("The divisors of %d are ", n1);
for(l = 0 ; l < j ; l++){
printf("%d ", divisors1[l]) ;
}
printf("\n") ;
// printf("The divisors of %d are ", n2) ;
for(l = 0; l < k ; l++){
printf("%d ", divisors2[l]) ;
}
}
Однако после того, как я добавил этот новый блок цитат, кажется, что код не работает.Ни выше, ни ниже.Я добавляю код сразу после конца первой части кода.
up_limit = 0 ;
low_limit = 0 ;
if(j > k){
up_limit = j ;
low_limit = k ;
}else{
up_limit = k ;
low_limit = j ;
}
if(up_limit == j){
for(m = 0; m < up_limit ; m++){
test = divisors1[m] ;
for(h = 0, u = 0 ; h < low_limit; h++){
printf("%d", divisors2[h]) ;
if(test == divisors2[h]){
common_div[u] = divisors2[h] ;
u++ ;
}
}
}
}else{
for(m = 0; m < up_limit ; m++){
test = divisors2[m] ;
for(h = 0, u = 0 ; h < low_limit; h++){
printf("%d", divisors1[h]) ;
if(test == divisors1[h]){
common_div[u] = divisors2[h] ;
u++ ;
}
}
}
}
printf("The common divisors are \n") ;
for(i = 0; i < u ; i++){
printf("%d ", common_div[u]) ;
}
Мой главный вопрос - почему printf работает в таких случаях беспорядочно.Вот пример вывода после того, как я добавил код
Enter an integer 345
Enter an integer345
The common divisors are