0

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

我正在尝试用 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);
    }
4

3 回答 3

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 );
    }
于 2013-04-23T22:07:50.027 回答
0

您真的需要同时在内存中使用所有变量吗?

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

于 2013-04-23T22:09:28.363 回答
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<>”类。但是,如果您使用 C“数组”,则通常需要在分配数组之前预先知道最大 #/elements 。您可以通过使用“malloc()”在一定程度上缓解这种情况 - realloc() 允许您在运行时更改数组大小。

于 2013-04-23T22:09:36.750 回答