cuốn sách gpt4 ai đã làm

c - 来自先前 scanf 的输入附加到另一个 scanf

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:06:30 32 4
mua khóa gpt4 Nike

Chương trình yêu cầu người dùng nhập tên, ID, v.v. của 2 sinh viên, ghi dữ liệu vào một tệp và đọc dữ liệu từ tệp.

#include 
#include
#include
#include
#include

int chính(){
int fd, i = 0;
tên char[20], id[10], dob[10], giới tính[7], trạng thái[10];
fd = open("file.dat", O_WRONLY|O_CREAT, S_IRWXU); //mở file.dat để ghi; nếu nó không tồn tại, hãy tạo nó;
vì (i = 0; i < 2; i++){
// lấy đầu vào từ người dùng
printf("\nDành cho sinh viên %d\n", (i + 1));
printf("Nhập tên: ");
scanf("%[^\n]%*c", name); //%[^\n]%*c - đọc mọi thứ lên đến (không bao gồm) ký tự dòng mới
printf("Nhập ID: ");
scanf("%[^\n]%*c", id);
printf("Nhập ngày sinh: ");
scanf("%[^\n]%*c", dob);
printf("Nhập giới tính: ");
scanf("%[^\n]%*c", giới tính);
printf("Nhập tình trạng hôn nhân: ");
scanf("%[^\n]%*c", trạng thái);
// ghi sinh viên hiện tại vào file
write(fd, name, 20);
viết(fd, id, 10);
viết(fd, dob, 10);
write(fd, giới tính, 7);
write(fd, trạng thái, 10);
}
đóng(fd);
//hiển thị dữ liệu từ file
char buf[20];
fd = open("file.dat", O_RDONLY); //mở file để đọc
vì (i = 0; i < 2; i++){
printf("\nDành cho sinh viên %d\n", (i + 1));
read(fd, buf, 20);
printf("Tên: %s\n", buf);
đọc(fd, buf, 10);
printf("ID: %s\n", buf);
read(fd, buf, 10); //đọc ngày sinh
printf("Ngày sinh: %s\n", buf);
read(fd, buf, 7);
printf("Giới tính: %s\n", buf);
read(fd, buf, 10);
printf("Tình trạng hôn nhân: %s\n", buf);
}
}

Phần đầu vào:

tới học sinh 1
Nhập tên: Mary Jane Smith
Số đầu vào: 1
Nhập ngày sinh: 09/09/1990
Nhập giới tính:Nữ
Nhập tình trạng hôn nhân: độc thân

dành cho học sinh 2
Nhập tên: John Doe Paul
Số đầu vào: 2
Nhập ngày sinh: 8/8/1993
Nhập giới tính: nam
Nhập tình trạng hôn nhân: đã kết hôn

Phần hiển thị:

tới học sinh 1
Tên: Mary Jane Smith
Số: 1
Ngày sinh: 9/9/1990 Smith
Giới tính:Nữ
Tình trạng hôn nhân: độc thân

dành cho học sinh 2
Tên: John Paul
Số: 2
Ngày sinh: 08/08/1993aul
Giới tính: Nam
Tình trạng hôn nhân: đã kết hôn

Một số phần của tên được thêm vào ngày sinh. Xin vui lòng cho tôi biết tại sao lại như vậy và làm cách nào để giải quyết nó?

Tôi đọc được rằng scanf không đáng tin cậy, nhưng tôi phải sử dụng scanf trong chương trình của mình.

câu trả lời hay nhất

Vấn đề không nằm ở scanf. Vấn đề nằm ở việc xử lý bộ đệm của bạn khi đọc lại tệp. Khi bạn đọc một tập tin, bạn đọc nó nhiều lần trong bộ đệm "buf", bộ đệm này không được đặt lại theo bất kỳ cách nào. Vì vậy, khi bạn đọc 10 ký tự từ tệp, 20 ký tự được chèn trước đó vào tên vẫn còn trong bộ đệm và do đó hiển thị. Bạn cần chấm dứt chuỗi đúng cách (sử dụng "\0") hoặc đặt bộ đệm thành tất cả các số 0 khi sử dụng chuỗi đó để đảm bảo "nội dung cũ" không được trả về.

Về c - nối thêm đầu vào từ scanf trước vào scanf khác, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/32596149/

32 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress