あなたが行全体を読み取るためにfgets()
を使用し、そのようにそれを解析する必要があります
char buffer[BUFSIZE] = {}; // BUFSIZE should be large enough for one line
fgets(buffer, BUFSIZE, stdin); // read from standard input, same as scanf
char *ptr = strtok(buffer, " "); // second argument is a string of delimiters
// can be " ,." etc.
while (ptr != NULL) {
printf("Word: '%s'\n", ptr);
ptr = strtok(NULL, " "); // note the NULL
}
を現在の単語が最後の単語が存在するかどうかの確認は重要ではありません。
while (ptr != NULL) {
char word[BUFSIZE] = {};
strcpy(word, ptr); // strtok clobbers the string it is parsing
// So we copy current string somewhere else.
ptr = strtok(NULL, " ");
bool is_last_word = (ptr == NULL);
// do your thing here with word[]
}
あなたは、行が(BUFSIZE-1)文字を超えないことに頼っています。それ以上あれば、fgets()呼び出しの間に単語を壊すことになります。 –
正解ですので、私の側のコメントです。他の唯一の方法は、動的に割り当てられた文字列バッファを使用することですが、これはこの質問の範囲にはありません。さらに、そうするなら、C++をストリングストリームとともに使用する方が良いでしょう。 – evgeny