我是初学者。我正在尝试解决一对配对计划。程序要求添加的对数和实际对,然后返回每对的总和。我正在使用一个数组来存储每对的总和,但是当我打印出每个元素时,最后一个元素总是错误的。这就是我到目前为止所做的:
int c, val1, val2, x, i;
printf("Enter the number of pairs to sum: \n");
scanf("%d", &c);
int sum [c];
printf("Enter the pairs: \n");
for ( x = 0; x < (c - 1); ++x)
{
scanf("%d", &val1);
scanf("%d", &val2);
sum [x] = val1 + val2;
val1 = 0;
val2 = 0;
}
printf("The sum of each pair is: \n");
for (i = 0; i < c; ++i)
{
printf("%d\t", sum[i]);
}
答案 0 :(得分:1)
更改此
for ( x = 0; x < (c - 1); ++x)
到此:
for ( x = 0; x < c; ++x)
您要等到(c-1)
,然后打印c
次。
所以,在修复之后,你的循环将是这样的:
printf("Enter the pairs: \n");
for ( x = 0; x < (c - 1); ++x)
{
scanf("%d %d\n", &val1, &val2 );
sum [x] = val1 + val2;
val1 = 0; // Do you really need me?
val2 = 0; // and me?
}
您不需要在每个循环结束时取消val1
和val2
。
第一次进入循环时想一想。这些变量未初始化,但它们由scanf()
初始化。
让我们说用户输入0和1,所以你的变量分别得到这些值。
然后,将它们设置为零。
然后,你再次进入循环内部,并为变量分配用户的输入。
等等......
如果您放弃此步骤,请考虑这是如何工作的:
Then, you set them to zero.
会是一样的!
唯一的区别是当你退出循环时,这些变量将包含用户为循环的最后一次运行输入的内容而不是零值,但我认为这不是问题。 :)