2013-02-26 109 views
0

我都是新手編程,所以請幫助我。看來結果變量沒有一個正確的值。我知道最好使用cincout,但我的導師要求我使用printfscanf如果和比較==

如果我將代碼更改爲printf(「%d」,result);我將得到: 運行時檢查失敗#3 - 變量'結果'正在使用而未被初始化。 ,如果我將代碼更改爲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

我這是C還是C++?看看你的代碼(除了不正確的'main'聲明之外),你會認爲它是C.你學習了哪種語言?他們是不同的。 – 2013-02-26 15:00:30

+0

@WilliamPursell我認爲區別在這裏沒有任何意義。 – 2013-02-26 15:03:08

+0

你的導師的建議是不好的,類型安全的C++流是首選。如果您必須使用'printf',則添加一些用於診斷程序流程,然後在其工作後將其取出。或者學習如何在調試器中執行代碼(額外功勞) – 2013-02-26 15:03:52

回答

4

您並不總是初始化result。如果您的if條件均未評估爲真,則它將被初始化。您需要確保始終對其進行初始化。

更重要的是,您不能通過&resultprintf,因爲那樣會打印出result的地址,我相信這不是您的願望。改爲通過result

printf("%d", result); 

當你寫道:

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

我相信,你實際上的意思是:

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

;我會得到:printf(「%d」,結果);如果我將代碼更改爲scanf(「%c」,&c);%c將從第一個scanf()!!!獲得空白區域,所以我必須以這種方式寫入scanf(「%c%* c」,&c);或這種方式scanf(「%c」,&c);。似乎%c與%d或%f不同,不會跳過空格 – user2111549 2013-02-26 16:05:37

+0

我不想進入調試練習,我可以幫助您將程序你問過關於'結果'的問題,我回答了這個問題: – 2013-02-26 16:12:42

0

result值實際上包含垃圾值時,沒有正確初始化它。因此,垃圾進入垃圾了!

同樣在此 - >printf("%d", &result);printf("%d",result);

+0

我應該如何正確初始化它? – user2111549 2013-02-26 16:11:45

+0

@ user2111549然而你喜歡,在某些情況下你根本沒有初始化它,我在第一個 – 2013-02-26 16:52:06

0

初始化結果和變化的printf( 「%d」,結果&);到printf(「%d」,結果);

1

您有:

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

將其更改爲:

scanf("%c", &c); 

而且你必須:

printf("%d", &result); 

將其更改爲:

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

使用'printf(「%d」,&result);'總會產生一些奇怪的東西! – 2013-02-26 15:02:23

+0

@ bash.d這並不奇怪,它是內存中'result' varialbe的地址。 – 2013-02-26 15:04:29

+0

是,我知道,這只是當你經歷過安裝10或3,然後獲得342643894!我只是強調...... – 2013-02-26 15:06:17