【问题标题】:Having trouble with a simple program in C, any advice?用 C 语言编写一个简单的程序时遇到问题,有什么建议吗?
【发布时间】:2013-02-22 05:50:37
【问题描述】:

我正在尝试使用 C 中的一个简单公式创建一个调度程序。 该程序的目标是询问用户他们一周内学习/工作的时间 (如果超过 40 小时,请告诉他们他们已经完成了一周)。

由于这是一项初级任务,我希望它相当容易,因为我过去使用 python 3.3 做过类似的事情,但经过大量试验后,我似乎无法让我的程序正常运行。

  • 我的程序适用于整数,但不适用于小数。我如何整合浮动?将 d% 更改为 f%?

已解决 * 主要问题是无论用户输入什么数字,最终的答案总是显示一个很大的负数。我试图利用我对 python 的了解在 C 中解决这个问题,但到目前为止,我无法准确理解我哪里出错了。 *

任何建设性的批评和/或建议都会令人惊叹。

我添加了 cmets 来展示我编码背后的过程

#include <stdio.h>

int main() {
    int a;
    printf("How many hours in a week are you in class?");
    scanf("%d", &a);

    int b;
    printf("How many hours a week are you studying?");
    scanf("%d", &b);

    int c;
    printf("How many hours have you already spent in class and studying this week?");
    scanf("%d", &c);

    int x = (a+b+c);

    if(x >= 40){
        printf("You have spent all the time required for this week.\n");
    }
    else{
        printf ("You have %d hours more to work and study for this week.\n", x);
    }

    //return 0 to end
    return 0;
}

提前致谢!

编辑 *

“大负数”错误似乎仅发生在当前的 CodeBlocks 会话中。

我刚刚重新启动计算机并重新加载程序,它似乎工作正常。但是,我知道我的代码并不完美,我仍然会感谢任何比我更有经验的人的意见。

感谢您的帮助。

【问题讨论】:

  • 逻辑错误,最终 printf 需要说 (40-x)
  • @KarthikT 这不考虑“大负数”。我在代码中没有看到这样做的原因。
  • 对我来说,没有大的负数。修复逻辑错误后,正确的结果出来了。

标签: c int


【解决方案1】:

scanf(%d, *int) 正在获取新的行字符 在调用 scanf 之前尝试 fgets 而不是 scanf 或 fflush(STDIN) 清除缓冲区

【讨论】:

  • 欢迎来到 Stack Overflow! fflush(stdin) 是 C 中的 UB(MSVC 中的 works)。此外,留下的换行符在这里不是问题。请参阅问题中的编辑:universal 解决方案(重新启动计算机)解决问题;)
  • 谢谢!直到你提到它,我才知道 fflush(stdin)。
  • @KingsIndian #include int fflush(FILE *stream);是C标准库
  • fflush() 是一个 C 标准函数。但是将 stdin 传递给 fflush() 是 C 标准定义的未定义行为。 fflush(stdin) 总是错误的(MSVC 的支持是非标准的)。
猜你喜欢
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多