所以我在 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
,如果这些a
s中至少有一个是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
然后使用循环读取p
int
数。
在循环的每次迭代中,您读取相同的变量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 节变量参数,它确实有帮助!