CodeChef问题:
Shivam是世界上最年轻的程序员,他只有12岁。 Shivam正在学习编程,今天他正在编写他的第一个程序。
程序非常简单,给定两个整数A和B,编写一个程序将这两个数字相加。
输入 第一行包含一个整数T,即测试用例的总数。然后跟随T行,每行包含两个整数A和B。
输出 添加A和B并显示它。
约束 1≤T≤1000 1≤A,B≤10000 例 输入项 3 1 2 100 200 10 40
输出 3 300 50
#include <stdio.h>
int main()
{
int T, A, B, i, sum[T];
scanf("%d", &T);
for(i=0;i<T;i++)
{
scanf("%d",&A);
scanf("%d",&B);
sum[i]=A+B;
}
for(i=0;i<T;i++)
{
printf("\n%d", sum[i]);
}
}
错误 运行时错误SIGSEGV-我搜索了它,它说数组超出范围。
答案 0 :(得分:1)
T
时, sum[T]
的值不确定。而是:
int main()
{
int T, A, B, i;
scanf("%d", &T);
int sum[T];
for(i=0;i<T;i++) ...
您应该检查scanf
的返回值。
答案 1 :(得分:1)
如果要分配内存运行时间(在程序执行期间),则使用诸如“ malloc”之类的函数会更合适。这是一个简短的示例。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int T, A, B, i;
int *sum;
scanf("%d", &T);
if (T <= 0) /*Check if the value of T is appropriate*/
{
fprintf(stderr, "Invalid argument T!\n");
}
/* Dynamically allocate the memory */
sum = (int *)malloc(sizeof(int)*T);
if (sum == NULL)
{
fprintf(stderr, "Failed to allocate memory!\n");
}
for(i=0;i<T;i++)
{
scanf("%d",&A);
scanf("%d",&B);
sum[i]=A+B;
}
for(i=0;i<T;i++)
{
printf("\n%d", sum[i]);
}
/* Free the allocated memory once you are not needing it anymore in
order to avoid memory leaks */
free(sum);
return (0);
}
注意:这只是一个示例,说明如何避免运行时错误,我没有仔细研究与for循环相关的其余逻辑。
答案 2 :(得分:0)
取T的输入值后声明sum [T]