如何计算C中基于char的strlen()的整数数组元素?

时间:2015-02-18 09:45:20

标签: c arrays scanf

我想计算输入后整数数组(大小,如:array [1000])中的元素数量,而不是在输入时手动计数(使用scanf() = =传递给scanf的参数数量) 。虽然int数组不是空终止,并且scanf()不能像getchar()gets()那样使用,并且对于int数组没有像strlen()这样的可用函数,是否可以写一个C程序,提示用户输入任意数量的数字,程序将对它们进行计数(传递给scanf()的总参数)并使用数组或指针打印最大值?

4 个答案:

答案 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;
}