In lạiTác giả: Vũ trụ không gianThời gian cập nhật: 2023-11-04 06:55:54294
Tôi biết quét() việc sử dụng không được khuyến khích. Nhưng tôi gặp một vấn đề, scanf gửi giá trị stdin tới hàm stdin tiếp theo. Tôi muốn biết tại sao điều này lại xảy ra.
Mã số:
#include
khoảng trống ffgets() { tên char[40]; printf("Tên bạn là gì?"); if (fgets(name, 40, stdin)) { printf("Xin chào %s", name); } }
int main(int argc, char **argv) { int một; printf("nhập một số: ");
int res = scanf("%d", &a); nếu (res > 0) { printf("Số nguyên hợp lệ %d.\n", a); } khác { printf("Không phải là số\n"); }
ffgets(); return 0; }
Đầu ra:
Trường hợp thử nghiệm 1:
Tại sao hàm không yêu cầu đầu vào tiêu chuẩn, nó chỉ in chuỗi trống
./a.out nhập một số: 23 Số nguyên hợp lệ 23. Xin chào tên bạn là gì?
Trường hợp thử nghiệm 2: Tôi đã nhập một chuỗi có các ký tự đặc biệt truyền tên.
./a.out nhập một số: ngẫu nhiên##¤ Nó không phải là một con số Tên bạn là gì? Xin chào ngẫu nhiên##¤
Tôi không muốn chuyển giá trị đầu vào tiêu chuẩn từ main sang hàm, tôi phải làm sao?
Tôi là một lập trình viên xuất sắc, rất giỏi!