声明用户输入变量的未知数量?

时间:2013-04-23 22:04:00

标签: c

我是一名新的程序员,希望了解循环并与用户进行交互。

我正在尝试用C编写一些程序,这些程序涉及用户输入一系列数字,然后扫描这些变量并用它们做一些事情。但是,我知道您应该在程序开头声明变量。问题是,我不知道如何在程序开始时声明未知数量的变量,而没有明确声明可能包含的最大变量数。有没有人对如何为未知数量的变量循环scanf()有任何建议?

包含以下内容的是有限版本的代码,因此每个人都知道我正在尝试做什么。

    #include <stdio.h>

    int main() {
double Num;
double a,b,c;
double max,min;
int i=0;

    printf("How many numbers? > ");
    scanf("%lf", &Num);

    printf("OK, now please enter ");
    printf("%lf", Num);
    printf(" floating point numbers > ");

    while(i<=Num) {
    scanf("%lf", &a);
    scanf("%lf", &b);
    }

3 个答案:

答案 0 :(得分:0)

您可能希望使用指向双数组的指针来保存数字并在运行时为其分配内存...

    #include <stdio.h>

    int main() 
    {
        double Num;
        double *a,*b,*c;
        double max,min;
        int i=0;

        printf("How many numbers? > ");
        scanf("%lf", &Num);

        a = malloc( sizeof( double ) * Num );
        b = malloc( sizeof( double ) * Num );
        c = malloc( sizeof( double ) * Num );

        if( !a || !b || !c )
        {
            printf( "Out of memory\n" );
            exit( -1 );
        }

        printf("OK, now please enter %lf floating point numbers > ", Num);

        while(i<=Num) 
        {
            scanf("%lf", &a[i]);
            scanf("%lf", &b[i]);
        }

        // do stuff with c

        free( a );
        free( b );
        free( c );

        exit( 0 );
    }

答案 1 :(得分:0)

你真的需要同时在内存中提供所有变量吗?

如果您计划计算一个未指定数量的用户输入数字的最大值,您只需要两个变量,而不是未指定数量的变量。

答案 2 :(得分:0)

建议(改动很小):

   #include <stdio.h>

   int main() {
     int Num;
     double a,b,c;
     double max,min;
     int i=0;

     printf("How many numbers? > ");
     scanf("%d", &Num);

     printf("OK, now please enter %d floating point numbers >", Num);
     for (i=0; i < Num; i++) {
       scanf("%lf %lf %lf", &a, &b, &c);
       printf ("you entered: a=%lf, b=%lf, c=%lf\n", a, b, c);

     }

     return 0;
    }

注意:此代码假设您只需要当前的a,b和c(例如,将它们与当前的最小值和最大值进行比较)。如果你想保留所有 a,b和c值,你输入... l然后你需要将它们存储在数组或列表中。

C ++有一个“vector&lt;&gt;”按订单生产的课程。但是,如果使用C“数组”,则通常需要在分配数组之前知道之前的最大#/元素,。您可以通过使用“malloc()”来缓解这种情况 - realloc()允许您在运行时更改数组大小。