Tôi đang cố gắng tạo một ứng dụng dòng lệnh trong C++ và tôi muốn đảm bảo rằng đầu vào là một số nguyên sau một đối số lệnh nhất định.Cách kiểm tra xem argv [count] có phải là số nguyên
Ví dụ này, tôi muốn kiểm tra xem đối số tiếp theo có phải là số nguyên sau đối số lệnh "-p" hay không. Đây là đoạn mã của tôi ngay bây giờ.
while (count < argc){
if (strcmp("-p", argv[count]) == 0){
has_p = true; //Boolean
pid = atoi(argv[count + 1]);
if (pid == 0 && argv[count + 1] != "0"){
err = 1;
cout << "pid argument is not a valid input" << endl;
pid = -1;
}
count++;
}
...
}
Bây giờ mã này bắt một cách chính xác các lỗi trong đầu vào này:
- -p 1777
- -p sss
- -p sss17
- -p [không gian] -U
nhưng không thành công ở định dạng nhập này
- -p 17sss
Tôi cố gắng để khắc phục điều này bằng cách cố gắng để so sánh nó sử dụng sprintf. Thật không may là cung cấp sprintf với con trỏ mảng char chỉ xuất ra 1 ký tự trong buffer2.
while (count < argc){
if (strcmp("-p", argv[count]) == 0){
has_p = true; //Boolean
pid = atoi(argv[count + 1]);
sprintf(buffer, "%d", pid);
sprintf(buffer2, "%d", *argv[count + 1]);
if (pid == 0 && argv[count + 1] != "0" || (buffer != buffer2)){
err = 1;
cout << "pid argument is not a valid input" << endl;
pid = -1;
}
count++;
}
...
}
Có cách nào để làm cho sprintf đọc toàn bộ mảng char không? Nếu không, có giải pháp nào tốt hơn cho việc này ngoài việc lặp qua con trỏ cho đến khi tôi nhấn "\ 0"
Chọn ngôn ngữ. Bạn nói C++, nhưng bạn đang sử dụng các thành ngữ C và câu hỏi được gắn thẻ cả hai. –
['isdigit'] (http://www.cplusplus.com/reference/cctype/isdigit/) – 101010
Sử dụng' strcmp' để so sánh hai chuỗi chứ không phải '! ='.Bạn có thể sử dụng 'if (isdigit (argv [count]))' để kiểm tra xem đối số có phải là một chữ số hay không. –