Lỗi EOF không dừng

Mình tạo 1 file client.dat với code 1 để lưu 2 account nhg khi muốn thoát bằng EOF - crtl + z thì không được phải nhấn đến lần thứ 3 thì mới dừng.
Sau sang code 2 đọc từ file client.dat ra thì lỗi không dừng, chương trình in liên tục account thứ 2.

Mong các cao nhân chỉ điểm

Code 1:

#include <stdio.h>
#include "pch.h"

int main(void)
{
	char name[30];
	int account;
	double balance;
	FILE *cfPtr;
	
	if ( (cfPtr = fopen("client.dat","w") ) == NULL)
	{
		puts("Cant open file.");
	}
	else
	{
		printf("%-10s%-13s%7s\n", "account", "name", "balance" );
		scanf( "%d%29s%lf", &account, name, &balance);
	}

	while ( !feof( stdin ) )
	{
		fprintf( cfPtr, "%d %s %.2f\n", account, name, balance );
		scanf( "%d%29s%lf", &account, name, &balance );
	}
	
	fclose( cfPtr );
	system("pause");
}


Code 2:

#include <stdio.h>
int main(void)
{
	char name[30];
	int account;
	double balance;
	FILE *cfPtr;

	if ((cfPtr = fopen("client.dat", "r")) == NULL)
	{
		puts("Cant open file.");
	}
	else
	{
		printf("%-10s%-13s%7s\n", "account", "name", "balance");
		fscanf(cfPtr, "%d%29s%lf", &account, name, &balance);
	}

	while (!feof(stdin))
	{
		printf("%-10d%-13s%7.2f\n", account, name, balance);
		fscanf(cfPtr, "%d%29s%lf", &account, name, &balance);
	}

	fclose(cfPtr);
	system("pause");
}

Về code 1 của bạn không có vấn đề gì.
Mình thử và vẫn ok.
image

Và đây là nội dung đã được lưu.
image

Còn về code 2 của bạn.

Chỗ này bạn phải sửa stdin thành cfPtr. Vì bạn đọc ở file client.dat chứ có phải bạn đọc từ stdin đâu. :sweat_smile:

Sau khi sửa thì chạy ngon lành. :point_down:
image

3 Likes

Ok, thank bác. Mới đọc chương liên quan đến dữ liệu File quá nên còn nhiều khiếm khuyết.
Còn cái code 1 để báo kết thúc thế nào cho ổn nhỉ. Như trên máy mình cứ liên quan dến EOF là toàn mắc bệnh nhập kết thúc nhiều lần mới được

Không nghĩ ra cách nào hơn ngoài mỗi lần nhập song hỏi muốn nhập tiếp k. :laughing:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?