2014-09-24 2 views
1

지금부터는 입력으로 부호없는 char 배열을로드하려고 할 때 각 입력 문자는 char로 처리됩니다. 프로그램에 서명되지 않은 문자를 입력에 넣고 있음을 알리는 방법은 무엇입니까?c의 공백으로 구분 된 부호없는 char을 읽는 방법

입력은 지금 현재의 출력

unsigned char input[256]; 
fgets(input,sizeof(input),stdin); 
for(int i=0; input[i] != '\n'; i++){ 
    printf("%hhu ", (unsigned char) input[i]); 
} 

이다 86 75 178 98 75 15 78 88 "8 6 7 5 1 7 8 9 8 ...."

I가 갖는 input 어레이를로드하려는 숫자는 입력에 제공됩니다.

편집 : 첫 번째 부호없는 char의 끝을 표시하기 위해 공간을 구분 기호로 사용하는 것이 더 쉬울까요?

+2

문자열에서 여러 자리 숫자를 구문 분석하려면'strtol()'또는'sscanf()'및 친구를 사용할 수 있습니다. –

+1

'scanf' 나'sscanf'와 같은 형식화 된 입력 함수를 사용할 수도 있고, 입력을 파싱하고 문자열에서 int 로의 변환을 수행하는 코드를 작성할 수도 있습니다. –

답변

2

버퍼를 읽은 후 구문 분석하십시오. "%n"을 사용하면 검색이 얼마나 진행되었는지 알 수 있습니다.

unsigned char input[256]; 
if (fgets(input,sizeof(input),stdin) == NULL) { 
    HandleEOForIOError(); 
} 

int n; 
char *p = input; 
unsigned char value; 
while (sscanf(p, " %hhu %n", &value, &n) == 1) { 
    printf("%hhu ", value); 
    p += n; 
} 
if (*p != '\0') Handle_LeftOverGarbageInString(); 
+0

참고 :' "% hhu % n"'은 ""% hhu % n "'과 같은 효과를 나타냅니다. ' "% hhu"'앞에 선행 공간이 필요 없지만' "(* p! = '\ 0') ... '에'"% n "'의 앞 공간이 필요합니다. – chux