2012-05-30 2 views
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 и дополнительную сумму 0,5 от Y. Мы должны дать в качестве Y. Кодекс дает Runtime Error, которые могли бы быть за более чем Memeory разрешено использовать. Может ли кто-нибудь дать советы по сокращению использования памяти или узнать, есть ли ошибка в программе?Ошибка выполнения слишком большой памяти?

+0

Эта программа не должна создавать такие сообщения; он практически не использует никакой памяти. Можете ли вы дать нам точное сообщение об ошибке, которое вы получаете, и какую строку вы его используете? – templatetypedef

+4

Этот отступ является произведением искусства. – cnicutar

+1

@ Джеймс Маклафлин [NOOOOOOOOOOOOOOO!] (Http://www.nooooooooooooooo.com/) – cnicutar

ответ

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», поэтому я его оставил. Я предполагаю, что вы хотели «округлить до ближайшего доллара». В этом случае «%» определенно не способ сделать это.

Оригинальная программа, возможно, скомпилирована - но она почти наверняка не была «правильной».

И оригинальная программа, насколько я могу судить, должна была работать где угодно - я не видел ничего, что могло бы вызвать «состояние отсутствия памяти».

«Надеюсь, что поможет .. хотя бы немного ...

2
 scanf("%d,%e", &X, &Y); 
+0

% g вместо% e? – user1194497

+0

Итак, мне нужно принимать входы в разных функциях scanf()? – user1194497

+0

int scanf (const char * format, ...); Итак, первым параметром является формат. Вы передаете первый и второй параметры в качестве формата, тогда вы хотели бы прочитать ваш float в строке «% e». http: // www. java2s.com/Code/C/stdio.ч/scanfreadinput.htm – Pethical

1

(кроме зсапЕ() с двойной строкой формата, который был обработан другими)

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) { 

Иногда правила старшинства не так уж плохо на всех ...

Смежные вопросы