0

一度に入力行を受け取り、トークンが2つある行だけを出力するプログラムを作成する必要があります。入力が50バイト以下であると想定します。fgetsを使用して一度に1行をキャプチャし、sscanfを使用して一度にトークンを取得し、2が返されるかどうかを確認しました。ただし、機能していないようです。誰かがそれを行う方法を提案できますか?

#include <stdio.h>

int main(void)
{
    char buff[50];
    char token[50];
    int number;

    while (fgets(buff, sizeof(buff), stdin) != NULL)
    {
        while ((number = sscanf(buff, "%s", token)) != EOF)
        {
            number = sscanf(buff, "%s", token);
            if (number == 2)
            {
                printf("%s\t", token);
            }
        }
    }
    return 0;
}
4

5 に答える 5

3

これを行う -

number = sscanf(buff, "%s %s", token, token);
于 2012-06-27T04:58:48.067 に答える
1

私はあなたの問題を取り除くためにscanfを使用しません。strtok代わりにで定義された関数を使用できますstring.h。したがって、あなたの質問に対する答えは次のようになります。

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

int main(void) {
    char buff[50];
    char *token;
    int number=0;

    while (fgets(buff, sizeof(buff), stdin) != NULL) {

        if((token = strtok (buff, " ")) != NULL) {
            ++number;
            while ((token = strtok (NULL, " ")) != NULL)
                ++number;
        }
        if(number == 2)
            printf("Current line has two tokens\n");
        else printf("current line has %d tokens\n", number);

        number=0;
    }
    return 0;
}
于 2012-06-27T06:09:50.347 に答える
1

http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/から:

"s: 文字列。これは、空白が見つかるまで後続の文字を読み取ります (空白文字は、空白、改行、およびタブと見なされます)。"

%s を 1 つしか使用していないため、1 つ以上を返すことはありません。とにかく、while 条件内で既に sscanf を呼び出しています。while 本体内で再度呼び出す必要はありません。

于 2012-06-27T04:58:56.333 に答える
0

これを試してください

#include <stdio.h>

int main(void)
{
char buff[50];
char token1[50], token2[50];

while (fgets(buff, sizeof(buff), stdin) != NULL)
{
    if( sscanf(buff, "%s %s", token1, token2) == 2 )
    {
        printf("%s ", buff);
    }
}
   return 0;
}
于 2012-06-27T06:10:38.557 に答える
0

これは動作します..

#include <stdio.h>

int main(void)
{
    char buff[50];
    char token1[50];
    char token2[50];
    char token3[50];

    while (fgets(buff, sizeof(buff), stdin) != NULL)
    {

        if (sscanf(buff, "%s%s%s", token1, token2, token3) == 2)
        {
            printf("%s %s\n", token1, token2);
        }
    }
    return 0;
}
于 2012-06-27T06:25:01.137 に答える