2016-12-14 22 views
1

isdigit을 사용할 수 없습니다. 여기 내 코드 중 일부입니다.왜 isdigit은 항상 false를 반환합니까?

void input(int *array, int size) { 
    int x; 
    printf("Give me ten numbers. \n"); 
    for (int i = 0; i < size; i++) { 
     do { 
      printf("Array[%d]: ", i); 
      scanf("%d", &x); 
      scanf("%*[^\n]"); 
     } while (!isdigit(x)); 
     array[i] = x; 
    } 
} 

이 프로그램의 목적은 (아무 문제가없는) scanf와 키보드의 정수를 읽는 것입니다. 입력이 숫자가 아닌 경우 사용자가 숫자를 제공 할 때까지 while 루프를 반복해야합니다. isdigit을 사용하면 문자가 정수인지 여부를 확인할 수 있습니다. 정수이면 1을, 그렇지 않으면 0을 반환합니다. 적어도 그것은 그렇게해야합니다. 이 코드에서 항상 0

+2

은 무엇 "작동하지"않는 말은, 너에게? 결과와 예상되는 결과를 설명하십시오. 또한 I/O는 다음과 같은 사실을 기억해야한다 :'scanf()'의 반환 값을 확인해야한다. – unwind

+0

이 코드의 목적은 무엇입니까? – RoadRunner

+0

디버깅 도움말을 찾는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, 특정 문제 또는 오류 및 질문 자체에서이를 재현하는 데 필요한 가장 짧은 코드가 포함되어야합니다. 분명한 문제 성명이없는 질문은 다른 독자에게 유용하지 않습니다. See : 최소한의 완전하고 검증 가능한 예제를 만드는 방법. – Olaf

답변

0

난 당신이 뭘 하려는지 이해할 수를 반환합니다. 먼저 당신이 charachter의 정수를 필요로하는 경우 당신은 그런 '0'그래서

c-'0'. 

을 값을 떠나야한다보다는 그냥 (A charachter에게 훨씬 더 getchar가를 받아야하는 경우 단지

를 플러시), 을 scanf와를 사용
while(getchar()!='\n') 
       ; 

scanf ("% d", & int_variable)를 사용하고 싶지 않은 경우보다; 숫자를 다시 작성하는 함수를 만들어야합니다. 즉, charachter를 가져 와서 '0'을 남겨두고 다음 charachter마다 10을 곱합니다.

-1

달콤한 문제! isdigit 인수에 단일 문자 (ASCII 값)를 사용하고 문자가 숫자인지 여부를 확인하십시오. [그래서, 그것은 신호 숫자를 위해 작동 할 것입니다].

첫 번째로, isdigit은 단일 문자를 인수로 취하고, 숫자를 인수로 전달하면 "NO IT IS NOT NUMBER"라고 표시됩니다. 인수로 한 자리 숫자의 ASCII 값을 isdigit으로 전달해야합니다.

는 말은, '1'! = 1

'1'+ 1과 같다 '0'문자의 ASCII 값 인 '1'.

해결 방법 1 : 그것은 한 자리를 위해 작동합니다]

void input(int *array, int size) { 
    printf("Give me ten numbers. \n"); 
    for (int i = 0; i < size; i++) { 
     int x; 
     do { 
      x = 'a'; //bcz if user enter a character, scanf will not able to take the value, so, x will hold the previous value 
      printf("Array[%d]: ", i); 
      scanf("%d", &x); 
      scanf("%*[^\n]"); // fflush does not work on Macs. This is an alternative. [I don't know about the line, I copied from you.] 
     } while (!isdigit(x+'0')); //converting the value to character 

     array[i] = x; 
    } 
} 

해결 방법 2 : (프로 용) : P 단 한 줄의 코드 :

void input(int *array, int size) { 
    printf("Give me ten numbers. \n"); 
    for (int i = 0; i < size; i++) { 
     while(printf("array[%d] = ",i) && !scanf("%d",&array[i]) && !scanf("%*[^\n]")); // it will give same result. 
    } 
} 
+0

용액 1을 첨가하여 원하는 텍스트 버퍼를 검색 한 후, 사용자 입력과 추천. –

+0

해결 방법 2는 나에게 당신이 그것을 가지고 여부를 알려 –

+0

. 추가? 당신이 그것을 ANS로 동의로, pls는 마크. :) –