Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个C程序的输出不正确_C - Fatal编程技术网

为什么这个C程序的输出不正确

为什么这个C程序的输出不正确,c,C,我已经写了一个c程序像这样,希望得到正确的输出 #include <stdio.h> #include <stdlib.h> int main() { int t; scanf("%d", &t); int a[t-1], b[t-1]; //printf("%d\n",sizeof(a) ); do{ scanf("%d %d", &a[t-1], &b[t-1]);

我已经写了一个c程序像这样,希望得到正确的输出

 #include <stdio.h>
 #include <stdlib.h>

 int main()
 {
     int t;
     scanf("%d", &t);
     int a[t-1], b[t-1];
     //printf("%d\n",sizeof(a) );
     do{
     scanf("%d %d", &a[t-1], &b[t-1]);
     }while(--t);

    do{
         printf("%d\n",a[t-1] + b[t-1]);
    }while(--t);

    return 0;
 }
#包括
#包括
int main()
{
int t;
scanf(“%d”、&t);
int a[t-1],b[t-1];
//printf(“%d\n”,sizeof(a));
做{
scanf(“%d%d”、&a[t-1]、&b[t-1]);
}而(--t);
做{
printf(“%d\n”,a[t-1]+b[t-1]);
}而(--t);
返回0;
}
但是我得到的是随机值。这个程序怎么了? 尝试输入尝试次数,然后输入值,然后打印这些值的加法

附言
数组初始化在这里是动态的。它有效吗?如果无效,正确的方法应该是什么?

在读取所有值和打印所有值之间,您永远不会将
t
重置为其原始值。您需要这样做,可能需要使用另一个变量来保存其原始值。

在读取所有值和打印所有值之间,您永远不会将
t
重置为其原始值。您需要这样做,可能需要使用另一个变量来保存其原始值。

在读取所有值和打印所有值之间,您永远不会将
t
重置为其原始值。您需要这样做,可能需要使用另一个变量来保存其原始值。

在读取所有值和打印所有值之间,您永远不会将
t
重置为其原始值。您需要这样做,可能需要使用另一个变量来保存其原始值。

当您声明长度为
10
的数组时,索引从
0
9
。该数组没有索引
10

在代码中,数组的大小为
t-1

int a[t-1], b[t-1];
因此,在您的第一次迭代中,
scanf()
printf()
语句访问一个[t-1],但它不存在。而且,由于它是一个
do-while
循环,因此保证至少运行一次


在数组的边界之外访问数组是错误的。因此,正如Cool Guy在评论中指出的,任何事情都可能发生。

当您声明长度为
10
的数组时,索引从
0
9
。该数组没有索引
10

在代码中,数组的大小为
t-1

int a[t-1], b[t-1];
因此,在您的第一次迭代中,
scanf()
printf()
语句访问一个[t-1],但它不存在。而且,由于它是一个
do-while
循环,因此保证至少运行一次


在数组的边界之外访问数组是错误的。因此,正如Cool Guy在评论中指出的,任何事情都可能发生。

当您声明长度为
10
的数组时,索引从
0
9
。该数组没有索引
10

在代码中,数组的大小为
t-1

int a[t-1], b[t-1];
因此,在您的第一次迭代中,
scanf()
printf()
语句访问一个[t-1],但它不存在。而且,由于它是一个
do-while
循环,因此保证至少运行一次


在数组的边界之外访问数组是错误的。因此,正如Cool Guy在评论中指出的,任何事情都可能发生。

当您声明长度为
10
的数组时,索引从
0
9
。该数组没有索引
10

在代码中,数组的大小为
t-1

int a[t-1], b[t-1];
因此,在您的第一次迭代中,
scanf()
printf()
语句访问一个[t-1],但它不存在。而且,由于它是一个
do-while
循环,因此保证至少运行一次


在数组的边界之外访问数组是错误的。所以,正如Cool Guy在评论中指出的,任何事情都可能发生。

数组大小应该是一个常量,不能在运行时设置。对于运行时内存分配,您需要使用带有malloc函数的指针变量。所以首先需要在声明时为变量t指定一个常量值


提示一下,在任何语句之前都要尝试声明和初始化变量。数组初始化应该在scanf之前,通过这样做,您可以清楚地看到问题所在,即您正在分配内存(一些随机内存),然后从用户那里获取值。编译器必须做类似的事情,分配一些随机大小的内存,然后得到值t,现在这个值t只会在迭代中使用,而不会用于数组分配,因为数组以前是用一些rand大小分配的(垃圾值t在声明时指向的值)。有时程序会显示一些随机值,有时访问超出限制的内存时可能会崩溃。

数组大小应为常量,不能在运行时设置。对于运行时内存分配,您需要使用带有malloc函数的指针变量。所以首先需要在声明时为变量t指定一个常量值


提示一下,在任何语句之前都要尝试声明和初始化变量。数组初始化应该在scanf之前,通过这样做,您可以清楚地看到问题所在,即您正在分配内存(一些随机内存),然后从用户那里获取值。编译器必须做类似的事情,分配一些随机大小的内存,然后得到值t,现在这个值t只会在迭代中使用,而不会用于数组分配,因为数组以前是用一些rand大小分配的(垃圾值t在声明时指向的值)。有时程序会显示一些随机值,有时访问超出限制的内存时可能会崩溃。

数组大小应为常量,不能在运行时设置。对于运行时内存分配,您需要使用带有malloc函数的指针变量。所以首先需要在声明时为变量t指定一个常量值

提示一下,总是尝试声明和初始化变量b