Tôi có một đoạn mã ở đây thể hiện một số hành vi không mong muốn khi nhập một chuỗi có dấu cách. Ví dụ in bất hợp pháp_argument
. Khi đầu vào chứa nhiều từ, tôi muốn nó chỉ đăng ký từ đầu tiên.
Những gì hiện đang xảy ra là:
christian@oblig2 $ in 0
Nhập thông tin router ID > ID: 0, flag: f7, model_length: 13, model: D-Link y6000
Nó đăng ký cái đầu tiên để so sánh trong vòng lệnh in
. Nhưng quét
Không nhắc người dùng nhập dữ liệu tiếp theo, thay vào đó bỏ qua nó và đưa người dùng từ dữ liệu đầu vào trước đó quét
Từ/số thứ hai được nhập.
Điều tôi muốn xảy ra là:
christian@oblig2 $ in 0
Nhập ID bộ định tuyến để biết thông tin > 0
ID: 0, cờ: f7, model_length: 13, model: D-link y6000.
Nếu không thì mọi thứ sẽ hoạt động như mong đợi, nhưng tôi tự hỏi liệu có cách nào dễ dàng hơn để thực hiện việc này không. Tôi đã thử sử dụng Strtok nhưng không gặp may.
đầu vào char[256];
printf("%s@oblig2 $ ", getenv("USER"));
scanf("%s", đầu vào);
if(strcmp(input, "print") == 0) {
in();
}
Đoạn mã trên là cách tôi nhận thông tin đầu vào từ người dùng.
Có ai có ý tưởng gì không?
hiện hữu quét()
Sau khi nhận được giá trị đầu vào đầu tiên, nó để lại các giá trị còn lại trong luồng đầu vào. Hãy thử điều này để loại bỏ các ký tự còn lại:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
tiếp tục // loại bỏ các ký tự còn lại;
Nếu bạn đặt những dòng này vào lần tới từ stdin
Các ký tự bổ sung sẽ không làm hỏng thông tin đầu vào của bạn trước khi đọc.
Tôi là một lập trình viên xuất sắc, rất giỏi!