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

Lazada Vietnam Master card on Monday