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

  • 本文关键字:变量 c operators stdio
  • 更新时间 :
  • 英文 :


所以我在 C 中思考这个问题,只用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,如果这些as中至少有一个是0,我的答案是0。否则就是1.

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

我认为你可以用固定数量的变量来做到这一点。喜欢

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然后使用循环读取pint数。

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

ans最初设置为1,仅当输入零时,才更改为0。如果输入零,则控件会立即退出循环,因为break语句。

您可能需要检查scanf()的返回值和其他错误检查。

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

如果可以使用 C99,则允许可变长度数组。喜欢

int p;
scanf("%d", &p);
int arr[p];

如果使用动态内存分配,则可以使用stdlib.h中的malloc()calloc()

看到这里。


指针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;
}

是第一个循环的局部变量,因此仅对该循环可见,对第二个循环不可见。k的范围仅限于第一个循环。看到这里。

如果希望变量在两个循环中都可见,请在两个循环外部声明该变量。

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

未为第二个 for 循环定义 k

// 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

说明:阅读代码中的注释。我所说的块是指上部"{"和下部"}"之间的代码。除此之外,在代码中的任何地方,k 都是未定义的。因此,在第二个循环中,k 是未定义的。 您应该将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;
}

现在为了解决你的下一个问题,我想你可能想研究 C 语言中的可变参数函数。我可能错误地理解了你的问题陈述,但我的看法是你愿意将多个参数传递给一个函数。例如

有时,您希望将function称为:

function(Count_args, 1, 2, 3, 4, 5);

有时为:

function(Count_args, 10);

如果我是对的,你可能想看看这个例子,我上面引用的同一个参考。为了让您的生活更轻松,我在这里添加了相同的代码:

#include <stdarg.h>
#include <stdio.h>
int
add_em_up (int count,...)
{
va_list ap;
int i, sum;
va_start (ap, count);         /* Initialize the argument list. */
sum = 0;
for (i = 0; i < count; i++)
sum += va_arg (ap, int);    /* Get the next argument value. */
va_end (ap);                  /* Clean up. */
return sum;
}
int
main (void)
{
/* This call prints 16. */
printf ("%dn", add_em_up (3, 5, 5, 6));
/* This call prints 55. */
printf ("%dn", add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
return 0;
}

如果您愿意知道最新标准关于对函数具有变量参数的规定,请参阅 C11,第 7.16 节变量参数,它确实有帮助!

相关内容

  • 没有找到相关文章

最新更新