2013-02-26 4 views
0

Я все новичок в программировании, поэтому, пожалуйста, помогите мне. Кажется, что переменная результата не имеет правильного значения. Я знаю, что лучше всего использовать cin и cout, но мой репетитор попросил меня использовать printf и scanf., если и по сравнению с ==

если я изменю код на printf ("% d", результат); Я получаю: Ошибка проверки времени выполнения # 3 - переменная 'result' используется без инициализации. , и если я сменил код на scanf ("% c", & c); % c получит пустое пространство от первого scanf() !!! поэтому я должен написать это так scanf («% c% * c», & c); или таким образом scanf ("% c", & c) ;. кажется, что% c в отличие от% d или% f не пропускает пробел.

#include<stdio.h> 
#include<conio.h> 

int main () 
{ 
    int n1, n2; 
    int result; 
    char c; 
    printf("Lotfan addad aval ra vared konid\n"); 
    scanf("%d", &n1); 
    printf("Lotfan addad Dovom ra vared konid\n"); 
    scanf("%d", &n2); 
    printf("Please choose an operator\n"); 
    scanf("%c%*c", &c); 
    if (c=='+') 
    { 
     result=n1+n2; 
    } 
    else if (c=='-') 
    { 
     result=n1-n2; 
    } 
    else if (c=='*') 
    { 
     result=n1*n2; 
    } 
    else if (c=='/') 
    { 
     result=n1/n2; 
    } 
    //else 
    //{ 
     //printf("error"); 
    //} 
    //printf("%d%c%d=%d" ,n1,c,n2,&result); 
    printf("%d", &result); 
    getch(); 
    return 0; 
} 
+0

I s это C или C++? Глядя на свой код (кроме неправильного объявления «main»), можно предположить, что это C. Какой язык вы изучаете? Они разные. –

+0

@WilliamPursell Я думаю, что разница здесь не имеет никакого смысла. –

+0

Ваш совет преподавателя плох, типичные потоки C++ являются предпочтительными. Если вы должны использовать 'printf', добавьте некоторые для диагностики потока программы, а затем вытащите их после его работы. Или узнайте, как пройти через код в отладчике (дополнительный кредит) –

ответ

4

Вы не всегда инициализируете result. Если ни одно из ваших условий if не оценивает значение true, оно будет неинициализировано. Вам нужно убедиться, что вы всегда инициализируете его.

Что еще вы не должны пройти &result до printf, так как это напечатает адрес result, который, я уверен, не то, что вы желаете. Вместо этого перейдите result.

printf("%d", result); 

Когда Вы писали:

scanf("%c%*c", &c); 

Я полагаю, что вы на самом деле имел в виду:

scanf("%c", &c); 
+0

если я изменю код на printf ("% d", результат); Я получаю: printf («% d», результат); и если я сменил код на scanf («% c», &c);% c получит пустое пространство от первого scanf() !!!, поэтому я должен написать его таким образом scanf («% c% * c», &c); или таким образом scanf («% c», &c);. Кажется, что% c в отличие от% d или% f не пропускает пробел. – user2111549

+0

Я не хочу входить в упражнение для отладки, когда я помогу вам принять вашу программу в Вы спросили о «результате», и я ответил на это. –

0

result значение фактически содержит значение мусора, когда он не инициализирован. Следовательно, мусор в мусоре!

Кроме того, это ->printf("%d", &result); должно быть printf("%d",result);

+0

Как правильно его инициализировать? – user2111549

+0

@ user2111549 Однако вам нравится. В данный момент вы не инициализируете его вообще в некоторых случаях. Я объяснил это в первом абзац моего ответа. –

0

результат инициализации и изменения Е ("% d", & результат); printf ("% d", результат);

1

У вас есть:

scanf("%c%*c", &c); 

Изменить это:

scanf("%c", &c); 

И у вас есть:

printf("%d", &result); 

Изменить это:

printf("%d", result); 
+0

Использование 'printf («% d », & result);' всегда будет производить что-то странное! –

+0

@ bash.d Это не странно. Это адрес varialbe 'result' в памяти. –

+0

Да , Я знаю, это просто, когда вы expe cting 10 или 3, и вместо этого получите 342643894! Я просто подчеркивал ... –