假设我的程序必须接收2个输入: 第一个对应于数组的大小, 第二个输入对应于数组的元素,由一个空格分隔。
即。 (输入):
所以我必须填充一个大小为n = 4的数组,其中1,2,3,4为元素。 现在,我通常采用的方式是:
int *vector=malloc(n*sizeof(int));
for(int i=0; i<n; i++){
scanf("%d", &vector[i]);
}
适用于小的n值(如1000)。但是,如果我这样做,比如说,n = 100万,甚至是100.000,那根本不起作用。它陷入无限循环。 那么,是否有另一种使用scanf(或fgets或任何其他函数)填充数组的方法?
答案 0 :(得分:0)
忽略性能不如预期的事实,您没有考虑以下事项:
在C和C ++中,您有这些要求
signed char: -2^07+1 to +2^07-1 short: -2^15+1 to +2^15-1 int: -2^15+1 to +2^15-1 long: -2^31+1 to +2^31-1 long long: -2^63+1 to +2^63-1
这意味着:
你的代码
for(int i=0; i<n; i++){
scanf("%d", &vector[i]);
}
实际上正在工作,但是如果你将 n 值设置得非常大,那么它会产生溢出,你会在无限循环中堆叠......