30/09/2018, 16:32

về cách sử dụng cout

cho em hỏi sao hàm computeCoin(1, number, amountLeft) lại thực hiện trước hàm computeCoin(25, number, amountLeft)
code:

#include <iostream>
using namespace std;
int computeCoin(int coinValue, int& number, int& amountLeft);
int main()
{
	int amountLeft=1, number = 0;
	char tmp;
	do
	{
		cout << "Enter amount of cents: ";
		cin >> amountLeft;
		cout << computeCoin(25, number, amountLeft) << " quarter(s) " << computeCoin(10, number, amountLeft)
			 << " dime(s) and " << computeCoin(1, number, amountLeft) << " penny(pennies)" << endl;
			 
		cout << "Do you wanna continute? (y/n)" << endl;
		cin >> tmp;
	}
	while (tmp == 'y' || tmp == 'Y');
	return 0;
}
int computeCoin(int coinValue, int& number, int& amountLeft)
{
	number = amountLeft/coinValue;
	amountLeft = amountLeft - number*coinValue;
	return number;
}

p/s: nếu có ng hỏi vấn đề này trước rồi thì em sr, tại em nhìn qua 1 số topic rồi nhưng chưa có

Gió viết 18:34 ngày 30/09/2018

Cái này theo mình hình như là vấn đề “undefined behavior”. Bạn có thể tham khảo các trường hợp tại đây: http://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviours-that-a-c-programmer-should-know-a
Kết quả của thứ tự cout phụ thuộc vào trình biên dịch của bạn. Để tránh lỗi bạn nên viết tách các câu lệnh ra.

Nguyễn Minh Dũng viết 18:33 ngày 30/09/2018

Câu hỏi này hay nè, Đạt cũng không để ý vấn đề này.

Rất có thể là undefined behavior. Tức là trường hợp này cout << không đảm bảo cho mình là hàm computeCoin(25, number, amountLeft) sẽ được tính trước vì điều này không được định nghĩa trong ngôn ngữ C++.

Cũng có thể do hàm computeCoin(1, number, amountLeft) được đẩy vào trong stack cuối cùng và được tính đầu tiên. Lời giải thích này ít có khả năng đúng hơn lời giải thích trên.

Bài liên quan
0