簡體   English   中英

簡單的C ++代碼給出錯誤的答案

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM