我的 C 代码能够迭代一次并得出正确的里程,但在第二次迭代时失败了

问题描述 投票:0回答:1

问题的目标是编写一个程序,获取用户想要输入的多个数据集,然后在数据集中计算您行驶了多少英里。例如,对于第一个样本,前 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 程序员,一直在努力调整,但事实证明至少可以说很难。

c iteration
1个回答
0
投票

简而言之,正如其他人指出的那样,您有大量未初始化和/或误用的变量。

看来你正在尝试一下,所以我不太关心为你做作业。 也就是说,请注意我如何 1)确保变量在使用之前具有可用值; 2) 如果我没有通过

scanf
获得合适的输入,就退出。

关于您的代码需要注意的几点:

  1. 尽可能将变量保留在最内部的范围内。这不仅可以帮助编译器优化机器代码,还可以帮助编译器标记错误和警告。
  2. 根据 C 版本的不同,您可能需要在比使用变量更广泛的范围内声明变量(实际上并不是很相关,除非您使用的是非常旧的编译器或正在学习 K&R C 课程)。不过,在需要之前不要初始化它们,但是 DO 初始化它们 IF 你需要。
#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.