2016-02-18 7 views
-5

Итак, я пытаюсь заставить простую программу работать, попросив пользователя ввести числа в пределах 1-100 и сохранить все содержимое программы, а затем сообщить пользователю позже все числа и то, как это складывается.Кодовые блоки, добавление и сохранение целых чисел с помощью функции

Прямо сейчас все, что я хочу знать, это как сохранить переменные, и программа сможет рассказать мне, сколько чисел было введено.

Должен ли я выполнять функцию за пределами main, которая выполняет обработку для хранения и добавления?

#include <stdio.h> 




int main() { 

int number, even, odd; 

char name; 


printf("Enter your name") 
scanf(%d, &number); 
scanf (%c, &char) 

printf("Enter numbers within 1-100") 
printf("Enter 0 to quit") 

while (number != 0) { 
    if (number%2 == 1) { 
     //This is where I don't know how to store the odd numbers 
    } 
    else { 

     //And the even numbers here as well 
    } 



} 



printf("%c,the numbers you have entered are broken down as follows:\n",name); 
printf("You entered %d even numbers with a total value of \n", even); 
printf("You entered %d odd numbers with a total value of \n", odd); 




return 0; 

} 
+0

Мне также нужно сделать переменную для общего числа и отразить ее для вывода в конце, но я не беспокоюсь об этом только – Jclee

+0

Используйте целое или двойное значение для накопления значения, но вам не кажется, получить пользовательский ввод либо в программе. Откуда «номер»? – Ian

+1

Вам нужно хранить все или только количество введенных элементов и текущую сумму? Я не совсем понимаю ваш вопрос - похоже, вы в основном говорите «я не понимаю переменные» ... – John3136

ответ

0

Вот пример программы. Улучшите, как требуется, как было предложено в предыдущем обновлении.

#include <stdio.h> 
#include <stdlib.h> 
int 
main() 
{ 

    int number, even, odd; 
    int *evenarr, *oddarr; 
    int evencount = 0, oddcount = 0; 
    int i; 

    char name; 

    evenarr = (int *) malloc(100 * sizeof(int)); 
    oddarr = (int *) malloc(100 * sizeof(int)); 

    printf ("Enter numbers within 1-100"); 
    printf ("Enter 0 to quit"); 
    do 
    { 

     scanf ("%d", &number); 

     if (number != 0) 
     { 
      if (number < 1 || number > 100) 
      continue; 
      if (number % 2 == 1) 
      { 
       //This is where I don't know how to store the odd numbers 
       printf ("odd\n"); 
       oddarr[oddcount] = number; 
       oddcount++; 
       /* Realloc the arr if size exceed 100 */ 
      } 
      else 
      { 

       //And the even numbers here as well 
       printf ("even\n"); 
       evenarr[evencount] = number; 
       evencount++; 
       /* Realloc the arr if size exceed 100 */ 
      } 
     } 
    } 
    while (number != 0); 

    for(i=0; i<oddcount; i++) 
    printf("odd : %d\n", oddarr[i]); 
    for(i=0; i<evencount; i++) 
    printf("even : %d\n", evenarr[i]); 

} 
+0

ОК. Я понял. вы просите освободить в конце. Это нормально. –

0

Ваш вопрос немного неоднозначным, но мне кажется, что вам, возможно, потребуется выделить память динамически для хранения, так как вы не знаете, сколько номеров будет вводиться во время работы.

Это можно сделать несколькими способами. Первый метод включает использование функций malloc() и realloc(). Я оставлю вас исследовать эти функции, но в основном malloc() выделяет память в куче во время выполнения, а realloc() позволяет изменять размер памяти, которая была предоставлена ​​вам.

Я думаю, что лучшим методом было бы реализовать структуру связанных списков. Таким образом, вы можете хранить числа, когда пользователь вводит их, а затем перебирает список и подсчитывает, сколько чисел было нечетным или четным. И аналогичным образом вы также можете рассчитать их итоги.

Более подробная информация о связанных структурах данных списка:

Такова лишь некоторые из ресурсов, которые я использовал, чтобы узнать связанные списки. Дополнительная информация о связанных списках содержится в Google.

+0

Хорошо, что ваш ответ работает, но, согласно знаниям ОП, я не думаю, что он сможет реализовать связанный список. –

0

Вы можете использовать malloc(). Он выделяет память в куче. Также, используя realloc(), вы можете изменить размер выделенной памяти, используя malloc().

См. this учебник по malloc и free.

Указанный код @Umamahesh является правильным, так что он не освобождает память, выделенную программой, которая может быть фатальной.

Значит, вы просто free указатели. Исправленный код в @Umamahesh ответ:

#include <stdio.h> 
#include <stdlib.h> 
int 
main() 
{ 

    int number, even, odd; 
    int *evenarr, *oddarr; 
    int evencount = 0, oddcount = 0; 
    int i; 

    char name; 

    evenarr = (int *) malloc(100 * sizeof(int)); 
    oddarr = (int *) malloc(100 * sizeof(int)); 

    printf ("Enter numbers within 1-100"); 
    printf ("Enter 0 to quit"); 
    do 
    { 

     scanf ("%d", &number); 

     if (number != 0) 
     { 
      if (number < 1 || number > 100) 
      continue; 
      if (number % 2 == 1) 
      { 
       //This is where I don't know how to store the odd numbers 
       printf ("odd\n"); 
       oddarr[oddcount] = number; 
       oddcount++; 
       /* Realloc the arr if size exceed 100 */ 
      } 
      else 
      { 

       //And the even numbers here as well 
       printf ("even\n"); 
       evenarr[evencount] = number; 
       evencount++; 
       /* Realloc the arr if size exceed 100 */ 
      } 
     } 
    } 
    while (number != 0); 

    for(i=0; i<oddcount; i++) 
    printf("odd : %d\n", oddarr[i]); 
    for(i=0; i<evencount; i++) 
    printf("even : %d\n", evenarr[i]); 
    free (evenarr); 
    free (oddarr); 

} 

Также см: How do free and malloc work in C?.

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