Giúp đỡ về end of file trong C++

bun2it

GẮN KẾT
GÂY DỰNG
NHẬP HỘI
22 Tháng chín 2007 lúc 00:48
#1
Xin chào mọi người. Em có 1 vấn đề nhỏ này ko hiểu về function EOF trong C++, em có 1 chương trình như sau :
- Yêu cầu nhập tỉ giá giữa đồng Yên và $
- Yêu cầu nhập số tiền $ muốn đổi sang Yên, có thể thoát chương trình bằng cách nhập 0
- Chương trình sẽ đọc giá trị đồng Yên sau khi đổi và đổi lại thành $
- Thoát chương trình bằng giá trị cuối của input ( end of file)

Em biết là phải viết 2 while loop trong chương trình, nhưng tại loop thứ 2 có vẻ em bị ìninite loop. Mọi người giúp em với
Đây là code của em
Mã:
// there are 2 loops inside
#include <iostream>

using namespace std;

int main()
{  
    cout << "Enter today's currency exchange rate from dollars into yen: ";
    double dollar_to_yen;
    cin >> dollar_to_yen;
    
    double dollar_amount;
    bool more = true;
    while (more)
        {  
           cout << "Enter a U.S. dollar value: ";
           cin >> dollar_amount;
           if (cin.fail())
               more = false;
           else if (dollar_amount == 0)
               more = false;
           else
           cout << dollar_amount << " dollars is worth " 
                << dollar_amount* dollar_to_yen<< " yen." << endl;
            
        }  
        cin >> dollar_amount;
        while( cin.get() != EOF)
        {
            double yen_amount = dollar_amount* dollar_to_yen;
            cout << yen_amount << " yen is worth " 
                    << yen_amount/dollar_to_yen << " dollar." << endl;
        }
   
  return 0;
}
 

yan

GẮN KẾT
GÂY DỰNG
23 Tháng chín 2007 lúc 07:15
#3
while( cin.get() != EOF)
{
double yen_amount = dollar_amount* dollar_to_yen;
cout << yen_amount << " yen is worth "
<< yen_amount/dollar_to_yen << " dollar." << endl;
}

Try with:
int ch;
while( (ch = cin.get()) != EOF)
{
double yen_amount = dollar_amount* dollar_to_yen;
cout << yen_amount << " yen is worth "
<< yen_amount/dollar_to_yen << " dollar." << endl;

}
or
while( !cin.get())
{
double yen_amount = dollar_amount* dollar_to_yen;
cout << yen_amount << " yen is worth "
<< yen_amount/dollar_to_yen << " dollar." << endl;
}
 

bun2it

GẮN KẾT
GÂY DỰNG
NHẬP HỘI
23 Tháng chín 2007 lúc 10:35
#4
cảm ơn anh YAN nhưgn có vẻ như không có gì thay đổi. Chương trình yêu cầu là khi nhập giá trị $ thì nó sẽ đổi sang Yên. Sau đó sẽ lấy giá trị Yên đổi lại sang $. Nhập 0 tại lúc nhập giá trị $ để thoát hoặc thoát khi xác định giá trị EOF, em ko biết làm thế nào hết :(
 

knoppix

GẮN KẾT
GÂY DỰNG
24 Tháng chín 2007 lúc 20:48
#5
Chương trình của bạn nên sửa như sau:

Mã:
#include <iostream>

using namespace std;

int main()
{  
    cout << "Enter today's currency exchange rate from dollars into yen: ";
    double dollar_to_yen;
    cin >> dollar_to_yen;
    
    double dollar_amount;
    bool more = true;
    while (more)
	{
		cout << "Enter a U.S. dollar value: ";
		cin >> dollar_amount;

		if[COLOR="Red"] (cin.fail() || (dollar_amount == 0))[/COLOR]
		{
			more = false;
		}
		else
		{
			double yen_amount = dollar_amount * dollar_to_yen;
			cout << dollar_amount << " dollar(s) is worth " << yen_amount << " yen(s)." << endl;

			cout << yen_amount << " yen(s) is worth " << yen_amount/dollar_to_yen << " dollar(s)." << endl;
		}
	}

	return 0;
}
Chú ý là khi bấm tổ hợp ^Z trên console của Windows, chương trình hoạt động đúng như bạn yêu cầu. Nhưng với cygwin hay *nix, chương trình sẽ bị terminated, thoát ra không bình thường (là điều cần tránh).
 

Bài viết cần bạn xem thêm

Màn hình uốn dẻo của Royole có thể giúp mọi người nhìn thấy tương lai smartphone sẽ ra sao.


Đã có nhiều thông tin cho biết Samsung, LG, Huawei và Motorola đang phát triển smartphone gấp lại với dự kiến ra mắt vào đầu năm 2019, ...
Lazada Vietnam Master card on Monday