2013-12-06 5 views
1

Нам поставлена ​​задача сделать программу, которая принимает только десять входов от пользователя, а затем сортировать его в четном или нечетном Array.Сохранение нечетных и четных чисел в массиве

  1. Принимает 10 входов.
  2. Сегрегирует до четного или нечетного массива.
  3. Распечатайте, сколько из них находится в четном/нечетном массиве.
  4. Печать номеров в каждом массиве.

Это программа, которую я сделал:

#include<stdio.h> 

int main(){ 
int even[10]; 
int odd[10]; 
int number; 
int numOdd = 0; 
int numEven = 0; 
int sizeOdd = 0; 
int sizeEven = 0; 
int count; 

printf("Input numbers:\n"); 
for(count = 0; count < 10; count++){ 
    scanf("%d", &number); 
    if (number %2 == 0){ 
     while (numEven < 10){ 
      even[numEven++] = number; 
      sizeEven++; 
     } 
    } 
    else { 
     while (numOdd < 10){ 
      odd[numOdd++] = number; 
      sizeOdd++; 
     } 
    } 
} 

printf("\n\nEven numbers(%d): ", sizeEven); 
for(number = 0; number < numEven; number++){ 
    printf("%d, ", even[number]); 
} 

printf("\n\nOdd numbers(%d): ", sizeOdd); 
for(number = 0; number < numOdd; number++){ 
    printf("%d, ", odd[number]); 
} 

system("pause"); 
return 0; 
} 

Но моя программа просто выводит первые числа в массиве и повторяет его. Например, если я вводил 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, я получаю:

Четные числа (10): 2, 2, 2, 2, 2 Нечетные числа (10): 1, 1, 1, 1, 1

Am Я не так со всем/моей логики в программе? Я на правильном пути, и мне просто нужно немного подстроить его? Надеюсь на помощь!

ответ

1

Это может помочь вам: Почему вы добавить, что в то время как петля внутри если и другое условие:

if (number %2 == 0){ 
    even[numEven++] = number; 

Также even[numEven++] сама increses значение переменной numEven нет необходимости снова увеличивать в следующей строке.

+0

ДА! Он выводил правильные цифры. Большое спасибо! Теперь, если только я могу заставить его печатать, сколько чисел Odd и Even есть ... – confusedcat

+0

'numEven' и' sizeEven' - это две разные переменные, хотя они в основном дублируют друг друга. – Steve314

+0

Да, точно :) –

0

Вы использовали while дважды, где вы должны были использовать if. В результате ваш массив even будет заполнен первым введенным числом, и ваш массив odd будет заполнен первым нечетным числом.

Измените каждый while на if, и вам может быть все в порядке, хотя я еще не проверял наличие других ошибок. Например ...

if (number %2 == 0){ 
    if (numEven < 10){ 
     even[numEven++] = number; 
     sizeEven++; 
    } 
} 

while ключевое слово определяет полный цикл его собственной - это не предел какой-то другой вид повторения таких, как (в данном случае) вашего добавления элементов в каждом массиве.

BTW - вы на самом деле не нужны if чеки либо. Вы вводите только 10 элементов, поэтому вы можете добавить 10 элементов в массив even или 10 элементов в массив odd. Поскольку массивы являются достаточно большими, чтобы принимать 10 элементов, вам не нужны проверки границ в этом коде.

0

Ключевое слово while определяет полный цикл его собственных - это не предел для какого-либо другого повторения, такого как (в данном случае) добавление элементов к каждому массиву.

BTW - вы действительно не нужен, если чеки либо. Вы вводите только 10 предметов, поэтому максимум можете добавить

Смежные вопросы