2016-07-30 6 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"、ターゲット);

SOあなたは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-9a-z、またはA-Zと空白を含む)が読み取られます。

希望すると便利です。

+0

'"%99 [^ \ n] "'に間違っていますか?あなたは*文字クラス*を使用することができますが、* field width修飾子*を使って 'target'に収まる文字に制限します:' –

+0

@ DavidC.Rankin、 '99 '文字。 OPは、入力の長さが '<= 99 'であるとは言いません。だから私は一般的なものがもっと役に立つと思う。 –

+1

「%[0-9a-zA-Z]」は、 '0-9a-zA-Z'であれば、入力された文字数(制限なし) %99 [0-9a-zA-Z] "'が改善されます。 –

関連する問題