optarg (Getop 라이브러리의 -s 플래그 다음에 나오는 인수)가 숫자가 아닌 경우 오류 메시지를 인쇄하고 프로그램을 종료하고 원하는 경우 숫자 인 경우 크기를 optarg로 설정해야합니다. 내가 가진 문제는 -s r과 같은 명령이 오류 메시지에 부딪히는 반면 -s 2는 문자열을 2로 해석한다는 의미입니다. I 라인 # 1, 위한 int 값 2 선 # 2 0 int 값을 얻는 2 -sC isdigit을 사용하여 optarg가 숫자인지 확인
#1 printf("%d",atoi(optarg));
#2 printf("%d",isdigit(atoi(optarg)));
위해 함께
는디버깅.
내가 왜 atdi (optarg)가 int를 줄 때, isdigit (atoi (optarg)))가 0인지 궁금합니다. optarg가 int인지 확인하는 더 좋은 방법이 있습니까?
int main (int argc, char *argv[]){
int size;
char option;
size = 0;
const char *optstring;
optstring = "rs:pih";
while ((option = getopt(argc, argv, optstring)) != EOF) {
switch (option) {
case 'r':
type_set = 1;
break;
**case 's':
capacity_set = 1;
if(isdigit(atoi(optarg))==0){
fprintf(stderr,"Argument after -s needs to be an int\n");
return 0;
}**
else{
size = atoi(optarg);
}
break;
default{
return 0;
}
그러나 주 (내가 아는 크리스 알이), 그 atoi 함수가 제공하는 당신은 그냥 OPTARG가 한 자리 인 경우 알고 싶은 가정 (다음과 같이 또 다른, 어쩌면 더 간단한 방법은 * 0 * 변환에 오류가 있으면 캐치 할 수 있습니다. 단순히 첫 번째 문자를 전달하면 단순히 '+/-'가 숫자를 처리 할 수 없기 때문에 좋습니다. –
왜 atoi를 사용하지 않는 것이 좋을까요? 한자리 수 (OP가 말한대로). * 숫자 *가 아닌 * 숫자 *를 받아들이려는 경우 다른 것을 필요로합니다. –
그걸 두들겨 마시지 않겠습니다. OP를 이해하고 싶었다. 'atoi'에는 한계가있다. 나는 특히 첫 번째 문자를 사용하는 것을 좋아하지만, 사용자가'+/-'를 지정하려고하면'isdigit' 제한이있다. (실제로는 대소 문자가 있지만 실제로는). –