用C语言实现从键盘输入一组非零整数(以输入零作为输入结束的标志)

实现从键盘输入一组非零整数,并以输入零作为结束标志的功能,可以通过循环读取用户输入并存储整数的方式来完成。以下是一个详细的实现步骤:

步骤:

  1. 定义数据结构和变量

    首先,我们需要定义一个合适的数据结构来存储输入的整数。这里可以选择使用动态数组(例如使用mallocrealloc)来动态地存储输入的整数。

    c
    #include <stdio.h> #include <stdlib.h> // 初始数组大小 #define INITIAL_SIZE 10 // 结构体定义 typedef struct { int *data; // 存放整数的数组指针 size_t size; // 当前数组中元素个数 size_t capacity; // 数组容量 } Array;
  2. 初始化数组

    创建一个初始化数组的函数,分配初始大小的内存空间。

    c
    // 初始化数组 void initArray(Array *arr) { arr->data = (int *)malloc(INITIAL_SIZE * sizeof(int)); if (arr->data == NULL) { fprintf(stderr, "Memory allocation failed.\n"); exit(EXIT_FAILURE); } arr->size = 0; arr->capacity = INITIAL_SIZE; }
  3. 添加整数到数组

    编写函数来向数组中添加整数,并在需要时动态扩展数组容量。

    c
    // 向数组中添加整数 void addToArray(Array *arr, int value) { // 如果数组已满,扩展数组容量 if (arr->size >= arr->capacity) { arr->capacity *= 2; // 增加容量为当前容量的两倍 arr->data = (int *)realloc(arr->data, arr->capacity * sizeof(int)); if (arr->data == NULL) { fprintf(stderr, "Memory reallocation failed.\n"); exit(EXIT_FAILURE); } } // 将值添加到数组中 arr->data[arr->size++] = value; }
  4. 主程序逻辑

    在主函数中实现循环读取输入的整数,并调用上述函数来存储非零整数,直到用户输入零为止。

    c
    int main() { Array numbers; int input; // 初始化数组 initArray(&numbers); // 提示用户输入整数,直到输入零结束 printf("Enter a series of non-zero integers (enter 0 to end):\n"); while (1) { scanf("%d", &input); if (input == 0) { break; // 输入零时退出循环 } addToArray(&numbers, input); } // 打印输入的非零整数 printf("Non-zero integers entered:\n"); for (size_t i = 0; i < numbers.size; ++i) { printf("%d\n", numbers.data[i]); } // 释放动态分配的内存 free(numbers.data); return 0; }

解释:

  • 数据结构和变量

    • 使用结构体 Array 来管理动态数组,其中包含了整数数组 data、当前元素个数 size 和数组容量 capacity
  • 初始化数组

    • initArray 函数初始化数组,并分配初始大小的内存空间。
  • 添加整数到数组

    • addToArray 函数用于将用户输入的非零整数添加到数组中,当数组空间不足时会自动扩展容量。
  • 主程序逻辑

    • main 函数中使用循环读取用户输入的整数,直到输入零为止。每次读取到非零整数就调用 addToArray 将其存储起来。
    • 最后打印出用户输入的所有非零整数,并释放动态分配的内存空间。

通过这种方式,你可以实现一个能够从键盘输入一组非零整数,并以输入零作为结束标志的C程序。