问题的目标是编写一个程序,获取用户想要输入的多个数据集,然后在数据集中计算您行驶了多少英里。例如,对于第一个样本,前 2 小时输入 20 英里/小时,第二至第六小时输入 30 英里/小时,第七小时输入 10 英里/小时。输入序列是n个数据集以及s(速度/英里/小时)和t(时间)。 -1 结束序列
示例输入
3 20 2 30 6 10 7 2 60 1 30 5 4 15 1 25 2 30 3 10 5 -1
输出示例
170 英里 180 英里 90 英里
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int n, s, t, timeDiff, newTime, sum, arrSum; //variables
int arr[100]; //array
int count = 0; //counter, which i haven't used yet but have been in the habit of doing
while (n != -1){
scanf("%d", &n); //Number of data sets to be entered
for(int i=0; i<n ;i++){
timeDiff = t; //saves last time value
scanf("%d %d", &s, &t);
newTime = t - timeDiff; //subtracts last time value from the new
if (timeDiff == 0){
sum = s * t;
arr[i] = sum;
}
else{
sum = s * newTime;
arr[i] = sum;}
}
for (int i = 0; i < n; i++){
arrSum = arrSum + arr[i];
}
printf("You went %d miles \n", arrSum);
sum = 0;
timeDiff = 0;
arrSum = 0;
newTime = 0;
for (int i = 0; i < n; i++){
arr[i] = 0;
}
count++;
}
return 0;
}
当我最初发现这个问题时,我认为这是因为我的数组已满,所以我必须清空它,因此最后的 for 循环(老实说,我什至不确定这是否完全正确)。我是一个相对较新的 c 程序员,一直在努力调整,但事实证明至少可以说很难。
简而言之,正如其他人指出的那样,您有大量未初始化和/或误用的变量。
看来你正在尝试一下,所以我不太关心为你做作业。 也就是说,请注意我如何 1)确保变量在使用之前具有可用值; 2) 如果我没有通过
scanf
获得合适的输入,就退出。
关于您的代码需要注意的几点:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int totalMiles = 0;
int totalHours = 0;
int count = 0;
int nrecs;
while (scanf("%d", &nrecs) == 1)
{
int hours, miles;
if (n < 0)
break;
++count;
hours = miles = 0;
for (int i = 0; i < n; ++i)
{
int speed, duration;
if (scanf("%d %d", &speed, &duration) != 2)
// bad input, report an error and exit
fprintf(stderr, "invalid input\n")
return EXIT_FAILURE;
totalMiles += (speed * duration);
totalHours += duration;
}
}
printf("You went %d miles in %d hours\n", totalMiles, totalHours);
printf("%d blocks processed\n", count);
return EXIT_SUCCESS;
}