[英]Simple C++ Code giving wrong answers
如果我依次輸入299,399,10,5,計算機應該給我答案5,但是給我-5。 為什么不5? 這使我感到困惑。 救命!!
#include "stdafx.h"
#include <iostream>
int add(int x, int y)
{
int a=x-y;
return a;
}
int x(int a)
{
std::cin >> a;
return a;
}
int y(int a)
{
std::cin >> a;
return a;
}
int main()
{
int a;
int b;
std::cin >> a;
std::cin >> b;
std::cout << add(x(a), y(b));
return 0;
}
編譯器可以隨意按其喜歡的順序調用x(a)和y(b)。 如果您這樣寫:
int c = x(a);
int d = y(b);
std::cout << add(c, d);
它應該工作。
哦,請不要將減法函數命名為'add'... :)
在聲明中
std::cout << add(x(a), y(b));
C ++標准未指定x(a)
和y(b)
的調用順序。 這意味着x()
可能在y()
之前被調用,也可能不會被調用。
您假設x()
首先被調用。 如果首先調用y()
,則將獲得所看到的結果。 無論哪種方式,編譯器都是正確的(在這種情況下,這實際上就是標准中“未指定”的含義)。
如果這些事情的順序很重要,則需要通過確保正確的順序來強制解決問題。 例如;
a = x(a);
b = y(b);
std::cout << add(a,b);
還存在一些擔憂,因為x()
和y()
不會使用從調用方傳遞的值。 除非它們是函數需要的其他東西的占位符,否則調用者沒有理由必須傳遞它們。
並具有一個名為add()
的函數,該函數可以進行減法運算....用肥皂洗漱。
因為x = 5且y = 10,所以5-10 = -5
在您的問題中,首先執行Y(a)函數,然后執行x(a)函數。 由於C / C ++是左執行函數。 每當您在函數示例中提及函數時,c =(X(a),Y(b)); 在此示例中,首先執行Y(a)函數,然后執行X(a)函數。 您的程序是正確的,但需要清楚執行哪個函數。 因此,我更新了您的代碼,如下所示。
int add(int x, int y)
{
std::cout<<"Executing add function";
std::cout<<"x="<<x<<" y="<<y;
int a=x-y;
return a;
}
int x(int a)
{
std::cout<<"Executing X function";
std::cin >> a;
std::cout <<"X will return "<<a;
return a;
}
int y(int a)
{
std::cout<<"Executing Y Function\n";
std::cin >> a;
std::cout <<"y will return "<<a;
return a;
}
int main()
{
int a;
int b;
std::cin >> a;
std::cin >> b;
std::cout << add(x(a), y(b));
return 0;
}
現在,您可以輕松找出正在執行的功能並可以提供相應的輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.