如何在C中扫描未知数量的整数到数组? [英] how to scanf unknown amount of integer numbers into array in C?
本文介绍了如何在C中扫描未知数量的整数到数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道我可以 scanf
一定数量的数字 scanf
例如3个数字
I know that I can scanf
certain amount of numbers with scanf
for example for 3 numbers
scanf("%d %d %d",array[0],array[1],array[2]);
但如果我不知道有多少数字(整数,不是浮点数),我怎么扫描呢?我会在输入之前输入一个数组(NOT EOF)?例如
but how can I scan it if I didn't know how many numbers (integer, not float) I would input into an array before enter (NOT EOF)? for example
input : 12 43 23(enter) --> array[0]=12, array[1]=43, array[2]=23
input : 10 20 30 40 50(enter) --> array[0]=10, array[1]=20, array[2]=30, array[3]=40, array[4]= 50
etc..
这是关于如何将数字输入整数数组。
It's about how to input the numbers into an integer array.
如果是可能,我想将它保存为2维数组,例如
And if it's possible, I want to save it into an 2 dimensions array, for example
input : 12 43 23(enter) --> array[0][0]=12, array[0][1]=43, array[0][2]=23
input : 10 20 30 40 50(enter) --> array[1][0]=10, array[1][1]=20, array[1][2]=30, array[1][3]=40, array[1][4]= 50
推荐答案
这是代码,显示如何将整数扫描成2D数组:
Here is come code showing how to scan the integers into a 2D array:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INITSIZE 5
#define BUFFSIZE 1000
void print_and_free(int **array, int rowsize, int colsize);
void check_ptr(void *ptr, const char *msg);
int
main(void) {
int **array;
size_t rowsize = INITSIZE, colsize = INITSIZE;
int row = 0, col, numdigits;
char buffer[BUFFSIZE];
char *number;
array = malloc(rowsize * sizeof(*array));
check_ptr(array, "Allocation");
printf("Enter digits(Enter blank line to end):\n");
while (fgets(buffer, BUFFSIZE, stdin) != NULL && strlen(buffer) != 1) {
col = 0;
numdigits = 0;
if (rowsize == row) {
rowsize *= 2;
array = realloc(array, rowsize * sizeof(*array));
check_ptr(array, "Reallocation");
}
array[row] = malloc(colsize *sizeof(int));
check_ptr(array[row], "Allocation");
number = strtok(buffer, " ");
while (number != NULL) {
numdigits++;
if (colsize == numdigits) {
colsize *= 2;
array[row] = realloc(array[row], colsize * sizeof(int));
check_ptr(array[row], "Reallocation");
}
array[row][col] = atoi(number);
col++;
number = strtok(NULL, " ");
}
row++;
}
print_and_free(array, row, col);
return 0;
}
void
print_and_free(int **array, int rowsize, int colsize) {
int row, col;
printf("Your numbers:\n");
for (row = 0; row < rowsize; row++) {
for (col = 0; col < colsize; col++) {
printf("array[%d][%d] = %d", row, col, array[row][col]);
if (col != colsize - 1) {
printf(", ");
}
}
free(array[row]);
array[row] = NULL;
printf("\n");
}
free(array);
}
void
check_ptr(void *ptr, const char *msg) {
if (!ptr) {
printf("Unexpected null pointer: %s\n", msg);
exit(EXIT_FAILURE);
}
}
这篇关于如何在C中扫描未知数量的整数到数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文