【问题标题】:Learning C for CS50 Lab1: Population Growth - My program runs but doesn't do what I intended为 CS50 Lab1 学习 C:人口增长 - 我的程序运行但没有达到我的预期
【发布时间】:2021-03-28 19:55:21
【问题描述】:

我的程序运行,但实际上并没有按照我的意愿执行。它提示输入开始尺寸,然后提示输入结束尺寸,然后就是这样。我希望它然后使用输入的数字来计算需要多少年,但我似乎无法让它做到这一点。提前感谢您的任何建议!

我的代码如下:

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // TO DO: Prompt for start size
    int start;
    do
    {
        start = get_int("Start Size: ");
    }
    while (start < 9);

    // TO DO: Prompt for end size
    int end;
    do
    {
        end = get_int("End Size: ");
    }
    while (end <= start);

    // TO DO: Calculate number of years until we reach threshold
    int years;
    do
    {
        years = (start + start/3 - start/4);
    }
    while (end > start);

    // TO DO: Print number of years
    printf("Years:%i\n", years);
}

【问题讨论】:

  • 请重新格式化(删除空行、缩进等)。此外,更准确地了解您获得的输出和期望的输出。此外,您应该为我们提供独立的示例。 get_in() 未定义。
  • 您的最后一个循环将永远运行,因为您永远不会修改其中的 startend
  • 建议大家学习做基本的调试,这样可以自己发现此类问题。在调试器中运行您的程序并逐行执行,检查运行时的变量值。
  • 你不是说int years = 0;start = (start + start/3 - start/4);后面跟years = years + 1;吗??
  • 谢谢大家,感谢您的建议。我不知道我的意思……*叹息*。我对编程世界很陌生,这是我从事的第一个任务。我使用了 help50 工具,并且一直在修改和检查……好几个小时。我终于得到它来计算问题了,但它还没有通过所有的测试。

标签: c cs50


【解决方案1】:

正如@kaylum 建议的那样,如果您使用调试器单步执行程序,您会很容易看到程序出了什么问题。

以下是关于在 Linux 和 Windows 上调试的两个 Stackoverflow 问题:

虽然我猜你的课程工作人员建议了一些本身允许调试的开发环境,可能与这些问题中的建议有点不同。

如果您要调试程序,单步执行单个命令,您会注意到执行会不断迭代do ... while (end &gt; start); 循环,正如@UnholySheep 所指出的那样。然后你会想“等等,为什么它不退出循环?”你会注意到你只改变了years的值,而你的循环退出条件是关于endstart,它们不会改变。

此外,为了将来参考 - 大多数 StackOverflow 用户都希望提问者进行“尽职调查”,在向我们寻求解决方案之前做出合理的努力来找出他们的问题。既然您了解了调试器 - 请在询问“为什么我的程序没有按照我的预期执行”之前使用它。

【讨论】:

  • 感谢您的解释,这对我来说是全新的,我不知道自己在做什么。我已经修改和运行这个程序好几个小时了,老实说,我不知道还有什么方法或其他地方可以寻求帮助。这是我参加的在线课程的第 2 周,没有机会寻求帮助。对于我可以在哪里提出这些问题,您有更好的建议吗?
  • @ladyviper92:当您遇到困难时,应该向您的课程工作人员寻求帮助。这就是他们的目的,对吧......另外,请咨询你的同学。
猜你喜欢
  • 2021-06-26
  • 2020-05-08
  • 2022-11-23
  • 2021-10-15
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多