1

だから私はこのscanfを持っています

scanf ("%30[^\n]%c", &i

ユーザーが 30 文字を超える文字を入力した場合に、文字が多すぎるというメッセージを表示し、再入力を促す条件を追加するにはどうすればよいですか?

入力が正しくなるまで再入力し続けるループ全体を次に示しますが、適切な条件が設定されていません

int keeptrying = 1, rc;
char after, i;

do
{
    rc = scanf ("%30[^\n]%c", &i, &after);
        if (rc == 0)
        {
            printf (" **Invalid input try again: ");
            clear();
        }
            else if (after != '\n')
            {
                printf (" **Trailing characters try again: ");
                clear();
            }
                else if () // THIS IS WHERE I WOULD PUT THE CONDITION
                {
                    printf (" **Title is longer than 30 characters: ");
                }
                    else
                    {
                        keeptrying = 0;
                    }

} while (keeptrying == 1);

return i;
4

2 に答える 2

1

基本的には、1行を読み、その長さが30より大きいかどうかを確認します。これを行うには、を使用して、代わりに次strlen()のようなものを使用することをお勧めします。getline

int keeptrying = 1;
char *line = NULL;
size_t linecap = 0;

do {
    ssize_t rc = getline(&line, &linecap, stdin);
    if (rc == 0)
    {
        printf ("End of file.");
        exit(1);
    }
    else if (strlen(line) > 30)
    {
        printf (" **Title is longer than 30 characters: ");
    }
    else
    {
        keeptrying = 0;
    }
} while (keeptrying == 1);

// Use line

free(line);
于 2012-12-02T18:54:54.313 に答える
1

scanf の後に getchar を使用できます (stdin のクリアにも使用できます)。

do
{
    char i[31];
    rc = scanf ("%30[^\n]", &i);
        if (rc == 0)
        {
            printf (" **Invalid input try again: ");
            clear();
        }
            else if (getchar() != '\n')
            {
                printf (" more than 30 characters try again: ");
                clear();
            }
                    else
                    {
                        keeptrying = 0;
                    }

} while (keeptrying == 1);
于 2012-12-02T19:27:15.360 に答える