0
#include <stdio.h>

int main()
{
    int X = 200;
    float Y = 1500;
    printf("Enter your initial Balance and the Amount to be Withdrawn. Note the Values should lie between 0 and 2000");
    scanf("%d", "%e", &X, &Y);
    if ((0 < X < 2000) && (0 < Y < 2000)) {
        if ((X < Y) && (X % 5 == 0)) {
            Y = Y - X;
            Y = Y - 0.5;
        } else {
            printf("%f", Y);
        }
        printf("%f", Y);
    } else {
        printf("The Input is Wrong");
    }
    return 0;
}

代码基本上要求一些数字 X。从 Y 中减去它,从 Y 中减去额外的 0.5。我们必须给出 Y。代码给出运行时错误,这可能是由于使用的内存超出了允许的范围。任何人都可以就如何减少内存使用或查看程序中是否存在错误提供任何提示?

4

3 回答 3

2
     scanf("%d,%e", &X, &Y);
于 2012-05-30T20:41:09.263 回答
1

(除了双格式字符串的scanf(),已经被别人处理过了)

if ((0 < X < 2000) && (0 < Y < 2000)) {

这种方式不起作用的是C。您可以尝试:

if (X > 0 && X < 2000 && Y > 0 && Y < 2000) {

另请注意,您不需要额外的括号。另一条线也一样

if ((X < Y) && (X % 5 == 0)) {

这可能是:

if (X < Y && X % 5 == 0) {

有时,优先规则并没有那么糟糕……

于 2012-05-30T21:05:13.807 回答
0

我不知道这是不是作业...

...但这个例子可能有助于澄清一些事情:

#include <stdio.h>

int
main(int args, char *argv[])
{
    int new_balance, old_balance;
    float withdrawal;

    /* Get input */
    printf("Enter your initial Balance and the Amount to be Withdrawn.\n");
    printf("Note the values should lie between 0 and 2000\n");
    while (scanf("%d %f", &old_balance, &withdrawal) != 2) {
      printf ("please enter two valid floating point numbers\n");
    }

    /* Validate input */
    if ( (old_balance < 0.0) || (old_balance > 2000.0) ) {
      printf ("error: balance(%d): must be between 0.0 and 2000.0\n",
        old_balance);
      return 1;
    }
    if ( (withdrawal < 0.0) || (withdrawal > 2000.0) ) {
      printf ("error: withdrawal(%f): must be between 0.0 and 2000.0\n",
        withdrawal);
      return 1;
    }

    /* Compute balance */
    new_balance = old_balance - withdrawal;

    /* Print results */
    printf ("Withdrawal: %f; old balance: %d, new balance: %d.\n",
      withdrawal, old_balance, new_balance);

    return 0;
}

我完全不确定“0.5”的要求是什么,所以我把它省略了。我的猜测是你想“四舍五入到最接近的美元”。在这种情况下,“%”绝对不是这样做的方法。

原始程序可能已经编译——但几乎可以肯定它不是“正确的”。

据我所知,原始程序应该可以在任何地方运行——我没有看到任何可能导致“内存不足”的情况。

'希望这会有所帮助..至少有点......

于 2012-05-30T22:16:32.597 回答