代码块,通过函数添加和存储整数

时间:2016-02-18 03:49:15

标签: c function integer

所以我试图让一个简单的程序工作,要求用户在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;

}

3 个答案:

答案 0 :(得分:0)

您的问题有点含糊不清,但在我看来,您可能需要动态分配内存以进行存储,因为您不知道在运行时输入了多少个数字。

这可以通过多种方式完成。第一种方法涉及使用malloc()和realloc()函数。我将让你研究这些函数,但基本上malloc()在运行时分配堆上的内存,realloc()允许你调整给你的内存大小。

我认为最好的方法是实现链表数据结构。这样,您可以在用户输入数字时存储数字,然后迭代列表并计算奇数或偶数的数量。同样,您也可以计算他们的总数。

有关链表数据结构的更多信息:

这些只是我用来学习链表的一些资源。有关Google链接列表的更多信息。

答案 1 :(得分: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]);

}

答案 2 :(得分:0)

您可以使用malloc()。它在堆上分配内存。此外,使用realloc()可以调整使用malloc()分配的内存大小。

请参阅mallocfree上的this教程。

代码@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?