2017-02-16 39 views
-1
#include<stdio.h> 
int calsum(int x,int y,int z); 

int main() 
{ 
    while(1) 
    { 
     int a, b, c, sum; 
     printf("Enter any3 numbers"); 
     scanf("%d%d%d", &a, &b, &c); 
     sum = calsum(a, b, c); 
     printf("sum=%d\n", sum); 
    } 
} 

int calsum (int x, int y, int z) 
{ 
    int d; 
    d = x + y + z; 
    if(d > 2) 
     return d; 
    else 
     d = 1; 
    return; 
} 

當我給輸入作爲-1 1 0我的輸出應爲1,但它給0
爲什麼呢? 它是所有關於增加三個數字返回碼誤解

+0

如果你的輸入是-1 1 0並且你添加了這3個數字,那就給你0,爲什麼還要有1?你也想糾正返回語句看起來像返回1,而不是d = 1;返回; – Aeonos

+1

您的'return'語句中未定義的行爲。 –

+1

使最後的return語句返回d; – Ankur

回答

5
int calsum (int x,int y,int z) 
{ 
    return ; 
} 

你的函數聲明和定義返回一個int,但你return語句是面無表情。這是違反語言限制。

程序的行爲是未定義的。有趣的結果是在這種情況下可能的結果。

+0

但是如果(返回d;)被輸入代替(return;)並返回代替(返回d),那麼它按照代碼運行 –

+0

@AnkitMathur - 未定義的行爲並不意味着「它不會工作」 。這意味着語言規範不會定義應該發生什麼。它可能似乎工作,它可能不會,它甚至可能會炒你的硬盤驅動器的所有C語言的關心。根據書籍歸還 – StoryTeller

+0

;代碼給出垃圾值,因爲我們沒有返回任何指定的值,但是如果d小於2,那麼輸出也是正確的並且等於d就是問題 –

0

更新您的calsum函數如下。您在其他部分分配d = 1,但不返回它。

int calsum (int x,int y,int z){ 
    int d; 
    d=x+y+z; 
    if(d>2) 
     return d; 
    else 
     return 1; 
    } 
+0

我會說更新它到'int calsum(int x,int y,int z){return x + y + z; }'。上面的代碼扼住了我。 – Haris

+0

@Haris:對於x = y = z = 0,您的代碼將返回0,但要求在此條件下返回1。 – nnn