【发布时间】:2018-09-08 23:32:34
【问题描述】:
我想问你是否可以多次读取相同的输入(stdin)?我即将得到一个非常大的数字,包含数千位数字(所以我无法将它存储在变量中,(而且我也不能使用文件夹!)。我的想法是将数字放入 int 数组中,但我没有不知道数组应该有多大,因为输入的位数可能会有所不同。我必须编写通用解决方案。 所以我的问题是,在将数字复制到数组之前,如何解决它,以及如何找出数字的数量(以便我可以初始化数组)。我尝试多次使用 scanf() 或 scanf() 和 getchar,但它不起作用。查看我的代码:
int main(){
int c;
int amountOfDigits=5;
while(scanf("%1d",&c)!=' '){//finding out number of digits with scanf
if(isdigit(c)==0){
break;
}
amountOfDigits++;
}
int digits[amountOfDigits];//now i know lenght of array, and initialize it
for(int i=0;i<amountOfDigits;i++){//putting digits into array
digits[i]=getchar();
}
for(int i=0;i<amountOfDigits;i++){//printing array
printf("%d",digits[i]);
}
printf("\n");
return 0;
}
【问题讨论】:
-
分配一些内存。阅读
fgets。如果输入不以换行符结尾,则重新定位内存并重复(读入前一个字符串结尾)。我确定有重复。 -
不,一般来说你不能重读输入。正如 Weather Vane 所提到的,通常的事情是
malloc然后realloc一些内存,随着您阅读越来越多的输入,数组越来越大。或者,在许多系统上,有一个库函数getline会自动为您执行此操作。 -
你必须使用动态分配:malloc() / realloc()。
-
但是,如果你在 Linux 上,如果信息被重定向到你的程序,你可以使用
STDIN_FILENO和mmap输入流。