Tôi đang tạo một chương trình nhỏ trong C có giao dịch với nhiều đối số dòng lệnh, vì vậy tôi quyết định sử dụng getopt để sắp xếp chúng cho tôi. Tuy nhiên, tôi muốn hai đối số không bắt buộc (tệp nguồn và đích) là bắt buộc, vì vậy bạn phải có chúng làm đối số trong khi gọi chương trình, ngay cả khi không có cờ hoặc đối số khác.Sử dụng getopt trong C với các đối số không tùy chọn
Dưới đây là một phiên bản đơn giản của những gì tôi phải xử lý các đối số với cờ:
while ((c = getopt(argc, argv, "i:d:btw:h:s:")) != -1) {
switch (c) {
case 'i': {
i = (int)atol(optarg);
}
case 'd': {
d = (int)atol(optarg);
}
case 'b':
buf = 1;
break;
case 't':
time = 1;
break;
case 'w':
w = (int)atol(optarg);
break;
case 'h':
h = (int)atol(optarg);
break;
case 's':
s = (int)atol(optarg);
break;
default:
break;
}
}
Làm thế nào để chỉnh sửa này để lập luận phi tùy chọn cũng được xử lý?
Tôi cũng muốn có thể có các tùy chọn không phải trước hoặc sau các tùy chọn, vậy cách xử lý sẽ như thế nào?
OK, nhưng vòng lặp của tôi sẽ xuất hiện nếu các đối số bắt buộc trước các đối số bắt buộc, vì vậy chỉ có các đối số bắt buộc sẽ được xử lý chứ không phải tùy chọn bắt buộc. Làm thế nào để tôi sửa lỗi này? –
Nó là phổ biến để yêu cầu các tùy chọn đến trước khi lập luận. Chỉ cần xác định nó trong trang 'man'. –
Vâng, tôi biết nhưng ví dụ với lệnh ssh, cờ -p có thể đến trước * hoặc * sau tên người dùng bắt buộc @ server. Tôi chỉ muốn biết làm thế nào để làm điều đó –