2016-07-30 4 views
3

문자열개개의 단어으로 변환하기 위해 strtok을 사용하고 있습니다. 나는 다음과 같은 짓을 :strtok이 첫 단어 만 인쇄하는 이유는 무엇입니까?

int main() { 
    char target[100]; 
    char *t; 
    scanf("%s",target); 
    t = strtok(target," "); 
    while (t!= NULL) 
    { 
    printf("<<%s>>\n", t); 
    t = strtok (NULL, " "); 
    } 
    return 0; 
} 

입력이 '이 문자열은'와 같은 문자열입니다, 나는 점점 오전 출력은 <<this>>입니다.

+0

'for (t = strtok (target, ""); t; t = strtok (NULL, "")) printf ("<<%s>> \ n", t);'? (비록 내가 '<<%s>'의 큰 팬이 아니더라도) –

답변

6

가 공백 만

을 때까지 문자열을 받아 들일 것입니다 당신이 scanf를 작성한 방법

scanf ("% s"대상); 당신이 scanf()를 계속 사용하려면

그래서 당신은, 당신은 아래의 코드를 사용하면 콘솔

scanf("%99[^\n]",target); 
+0

오, 멋지다, +1! – gsamaras

+1

나는 그것을 제안하려고했는데 - 당신은 너무 빠르다.'p' –

+0

'scanf ("% 99 [^ \ n]", 목표)'로 변경했다. 여전히 <> 만 인쇄한다. 첫 번째 단어. – Pepper

3

변경 :

scanf("%s",target); 

에 :

fgets(target, 100, stdin); 

귀하의 의견에 공백을 발생하면 멈추지 않을 것 처음입니다.

출력 : 개행 fgets() 저장 출력에 미치는 영향을

this is a string 
<<this>> 
<<is>> 
<<a>> 
<<string 
>> 

알 수 있습니다.

fgets(target, 100, stdin); 
target[strlen(target) - 1] = '\0'; 

를 지금 출력은 다음과 같습니다 : 당신이 원하는 경우에 당신은 간단하게 다음과 같이 폐기 할 수

this is a string 
<<this>> 
<<is>> 
<<a>> 
<<string>> 
+1

무수히 많은 이유 때문에'fgets'로 사용자 입력을 선호해야합니다 ... –

+0

@ DavidC.Rankin이 동의합니다. 그래서 fgets()가 내 마음에 처음 왔어. – gsamaras

+1

그래, 그 이유는 내가 (그리고 좋은 설명을 위해) 그것을 투표했다. –

3

에서 입력을하는 방법을 변경해야합니다

#include<stdio.h> 
#include <string.h> 

int main() { 
    char target[100]; 
    char *t; 
    //scanf("%s",target); 
    scanf("%99[0-9a-zA-Z ]", target); 
    printf("%s\n",target); 
    t = strtok(target," "); 
    while (t!= NULL) 
    { 
     printf("<<%s>>\n", t); 
     t = strtok (NULL, " "); 
    } 
    return 0; 
} 

작업 코드 here.

scanf("%s",target);을 쓰는 것만으로 첫 번째 공백까지 입력을 읽습니다. 그래서 당신은 출력으로 첫 단어 만 얻습니다. scanf("%99[0-9a-zA-Z ]", target);을 쓰면 입력 스트림에서 99 문자 (숫자 0-9, a-z 또는 A-Z 및 공백 포함)를 읽는 것입니다.

희망이 있으면 도움이됩니다.

+0

' "% 99 [^ \ n]"'에 문제가 있습니까? * 문자 클래스를 사용할 수는 있지만 * field width modifier *를 사용하여'target'에 맞을 문자를 제한해야합니다 :' –

+0

@ DavidC.Rankin,'99 '문자. OP는 입력 길이가'<= 99 '라고 말하지 않습니다. 일반적인 것이 더 도움이 될 것이라고 생각합니다. –

+1

"% [0-9a-zA-Z]"'는'0-9a-zA-Z'인 한 입력 된만큼의 문자를 읽을 수 있습니다. % 99 [0-9a-zA-Z] "'가 개선 될 것입니다. –

관련 문제