我想计算输入后整数数组(大小,如:array [1000])中的元素数量,而不是在输入时手动计数(使用scanf()
= =传递给scanf的参数数量) 。虽然int数组不是空终止,并且scanf()
不能像getchar()
或gets()
那样使用,并且对于int数组没有像strlen()
这样的可用函数,是否可以写一个C程序,提示用户输入任意数量的数字,程序将对它们进行计数(传递给scanf()的总参数)并使用数组或指针打印最大值?
答案 0 :(得分:0)
strlen()
迭代字符数组,直到遇到C字符串终止字符(ASCII \0
)。所以它是COUNTING
元素。如果你想为int
数组执行此操作,我猜你也可能有一个保留的终结符'数组的值,为它腾出空间(在数组中为终结符分配一个int)并实现类似于int_array_len()
的自己的strlen
。但是,在你输入它们的同时计算元素似乎是一个更好的方法。
答案 1 :(得分:0)
如果没有终止值,您必须在输入时对其进行计数。您可以通过定义struct
来保存数组来完成此操作。您的程序不知道您将输入多少个整数,并且此代码在数组已满时分配更多内存,跟踪数组大小和使用的元素。
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_STEP 10 // increment in array size
typedef struct {
int maxlen; // capacity of array
int length; // elements used
int *array; // the array pointer
} istruct;
int main(void) {
istruct intarr = {0}; // empty array
int i;
printf ("Enter some integers:\n");
while (scanf("%d", &i) == 1) {
if (intarr.length >= intarr.maxlen) {
intarr.maxlen += ARRAY_STEP; // increase array size
intarr.array = realloc(intarr.array, intarr.maxlen * sizeof(int));
if (intarr.array == NULL) {
printf("Memory allocation error\n");
exit (1);
}
}
intarr.array[intarr.length++] = i;
}
printf ("You entered:\n");
for (i=0; i<intarr.length; i++)
printf ("%-10d", intarr.array[i]);
printf ("\n");
if (intarr.array)
free(intarr.array);
return 0;
}
答案 2 :(得分:0)
智能垂直:
#include <stdio.h>
int main()
{
double a[100000],mx=0;
int i,j,c=0;
printf("Enter as many numbers as you wish . Press Ctrl+D or any character to stop inputting :\n");
/*for(i=0;i<100000;i++)
a[i]=0;*/
for(i=0;i<100000;i++)
{
if((scanf("%lf",&a[i]))==1)
c++;
//else break;
}
for(j=0;j<c;j++)
{
if(a[j]>mx) mx=a[j];
}
printf("You have inserted %d values and the maximum is:%g",c,mx);
return 0;
}
答案 3 :(得分:0)
这很简单。
只需声明所需的“初始大小”即可。并继续检查输入是否为有效整数。
if((scanf("%d",&a[i]))==1)
仅当输入为有效整数时,才为true
。因此,当输入不是int时,它将退出循环。您可以计算同一循环中的输入值数量以及最大值。
代码如下:
#include <stdio.h>
#include<limits.h>
int main()
{
int a[100],max = INT_MIN;
int i,j,count=0;
printf("Start Entering the integers... Give any non-integer input to stop:\n");
for(i=0;i<100;i++)
{
if((scanf("%d",&a[i]))==1) {
count++;
if(a[i]>max) {
max = a[i];
}
}
else
break;
}
printf("number of input values: %d;\nThe maximum input value: %d",count,max);
return 0;
}