01/10/2018, 09:04

Đoạn code Input và Output này chạy như thế nào và cách khắc phục

fstream file_lock("D:/file.txt", ios::in);
	int n;
	file_lock >> n; /*nếu file không có giá trị nào thì n sẽ bé hơn không*/
	file_lock.close();

	if(n < 0) 
	{
		file_lock.open("D:/file.txt", ios::out);
		file_lock << 5;
		file_lock.close();
	}

	file_lock.open("D:/file.txt", ios::in);
	file_lock.close();
	file_lock >> m;
	cout << m <<endl;

mình đang học phần Input và Output, và khi mình thử viết một chương trình
trong đó “file.txt” là một tệp chỉ được dùng để chứa 1 số nguyên duy nhất

mình kiểm tra xem tệp có dữ liệu hay không nếu không thì sẽ được nhập vào là số 5
sau đó sẽ cho in ra giá trị đã nhập vào hoặc giá trị sẵn có, nhưng tại sau nó lại luôn cho ra giá trị gì tầm bậy

Đình Nhì viết 11:12 ngày 01/10/2018

mình đã giải quyết được bằng cách viết một hàm ghi dữ liêu vào file và đã ghi được
tuy nhiên mình vẫn chưa hiểu được tại sao lại như vậy

Khoa NTA viết 11:20 ngày 01/10/2018

Bạn chỉ up một đoạn code nên mình nhận xét cho đoạn code này:

  • Bạn chưa kiểm tra file đã thực sử ‘mở’ hay chưa file_lock != NULL.
  • Mình không biết bạn lấy đâu ra cơ sở cho việc: nếu file không có giá trị nào thì n sẽ bé hơn không. Giá trị trong file là giá trị âm thì sao? Điều này không đúng đâu.
  • Giá trị được in ra màn hình chính là những số tùm lum có sẵn (do bạn không khởi tạo).
  • Tại sao bạn lại close trước khi đọc giá trị vào m ?
viết 11:07 ngày 01/10/2018

int n;

khai báo kiểu này thì n có giá trị nào cũng được, đâu phải là giá trị < 0, làm sao ktra if (n < 0) là xong được…

muốn kiểm tra file_lock >> n; có đọc được giá trị nào ko thì… xài thẳng nó luôn trong điều kiện if:

if (file_lock >> n)
{
    //đọc thành công
}
else
{
    //đọc thất bại
}
Bài liên quan
0