用C语言实现从键盘输入一组非零整数(以输入零作为输入结束的标志)
实现从键盘输入一组非零整数,并以输入零作为结束标志的功能,可以通过循环读取用户输入并存储整数的方式来完成。以下是一个详细的实现步骤:
步骤:
定义数据结构和变量
首先,我们需要定义一个合适的数据结构来存储输入的整数。这里可以选择使用动态数组(例如使用
malloc
和realloc
)来动态地存储输入的整数。c#include <stdio.h> #include <stdlib.h> // 初始数组大小 #define INITIAL_SIZE 10 // 结构体定义 typedef struct { int *data; // 存放整数的数组指针 size_t size; // 当前数组中元素个数 size_t capacity; // 数组容量 } Array;
初始化数组
创建一个初始化数组的函数,分配初始大小的内存空间。
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; }
添加整数到数组
编写函数来向数组中添加整数,并在需要时动态扩展数组容量。
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; }
主程序逻辑
在主函数中实现循环读取输入的整数,并调用上述函数来存储非零整数,直到用户输入零为止。
cint 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程序。