如何在C中使用可变数量的变量?

时间:2018-08-12 04:03:09

标签: c operators stdio

因此,我只考虑使用stdio.h-

我必须编写一个程序,该程序读取整数p,然后读取p整数。现在,我必须使用这些p整数并对它们执行另一次操作才能获得最终答案,我的主程序将返回该答案。

问题是我不知道如何对可变数量的整数执行操作。我尝试使用指针,但它们似乎不起作用。

有人可以帮忙吗?

#include <stdio.h>

int main(){
    int i, p, n;
        scanf ("%d", &p);
        for (n=0; n<p; n++){
            int a;
            scanf ("%d", &a);
            int *k=&a;
        }
        for (n=0; n<p; n++){
            int a=*k;
            if (a==0)
                i=0;
            else i=1;
        }
    return i;
}

我在这里要做的是读取某个整数p,然后读取p整数a,并且如果这些a中的至少一个是{ {1}},我的回答是0。否则为0

但是编译器说1没有为第二个for循环定义。我该怎么办?

2 个答案:

答案 0 :(得分:0)

我认为您可以使用固定数量的变量来完成此操作。喜欢

int p, a, ans=1;
scanf("%d", &p); //read number

for(int r=0; r<p; ++r)
{
    scanf("%d", &a);
    if(a==0)
    {
        ans=0;
        break;
    }
}   
printf("\nAnswer is: %d", ans);

ans变量保留答案。首先,您将int的数量读入p,然后使用循环读取p的{​​{1}}个数量。

在循环的每次迭代中,您都读取到相同的变量int中。您只需要知道至少一个输入是否为零即可。

a最初设置为ans,仅在输入零时才更改为1。如果输入零,则由于0语句,控件将立即退出循环。

您可能要检查break的返回值以及其他错误检查。

注释中提到了各种使用未知数量变量的方法。

如果可以使用C99,则允许variable length array。喜欢

scanf()

如果使用动态内存分配,则可以使用int p; scanf("%d", &p); int arr[p]; 中的malloc()calloc()

请参见this


指针stdlib.h位于

k

是第一个循环的局部变量,因此仅对该循环可见,而对第二个循环不可见。 for (n=0; n<p; n++){ int a; scanf ("%d", &a); int *k=&a; } for (n=0; n<p; n++){ int a=*k; if (a==0) i=0; else i=1; } 的范围仅限于第一个循环。参见this

如果您希望变量在两个循环中均可见,请在两个循环之外对其进行声明。

答案 1 :(得分:0)

首先,我将帮助您了解您所谈论的编译器错误:

  没有为第二个for循环定义

k

ReportsRequet

说明:阅读代码中的注释。我所说的块是在高位'{'和低位'}'之间的代码。除此之外,在代码中的任何地方,k都是未定义的。因此,在第二个循环中,k是不确定的。 您应该将public function rules() { return [ 'user_reported_id' => ['required','exists:users,id','different:user_reporter_id', Rule::unique('reports')->where('user_reporter_id','=',$this->input('user_reporter_id'))], 'user_reporter_id' => ['required','exists:users,id','different:user_reported_id', Rule::unique('reports')->where('user_reported_id','=',$this->input('user_reported_id'))] ]; } 函数更改为:

function be_exclude_current_post( $args ) {
    if( is_singular() && !isset( $args['post__in'] ) )
        $args['post__not_in'] = array( get_the_ID() );
    return $args;
}
add_filter( 'dpe_fpw_args', 'be_exclude_current_post' );

现在要解决您的下一个问题,我想您可能想学习C语言的variadic functions。在理解您的问题陈述时我可能错了,但是我的看法是,您愿意将多个参数传递给一个功能。例如,

您有时会以以下方式致电// some code for (n=0; n<p; n++){ int a; scanf ("%d", &a); int *k=&a; // Definition of k is here, and is restricted to this block, } for (n=0; n<p; n++){ int a=*k; // Its undefined here if (a==0) i=0; else i=1; } // some code

main()

,有时也可能是:

int main() 
{
    int i, p, n, k = 0;
    scanf ("%d", &p);
    for (n=0; n<p; n++) {
        int a;
        scanf ("%d", &a);
        int *k=&a;
    }
    for (n=0; n<p; n++) {
        int a=*k;
        if (a==0)
            i=0;
        else 
            i=1;
    }
    return i;
}

如果我是对的,您可能希望参考上面引用的同一参考文献来查看this example。为了使您的生活更轻松,我在此处添加了相同的代码:

function

如果您想知道最新的标准中关于函数具有可变参数的信息,请参阅C11的7.16 Variable arguments 部分,它确实有帮助!