1

わかりましたので、序文として、私は C についてほとんど知らないと言いたいと思います。私は高校で独学で C を勉強しているので、皆さんに助けを求めに来ました。私は C1 を使用していますが、それが # なのか ++ なのか、単に C なのか、あるいはそれらの違いが何なのかさえわかりません。とにかく私の質問は、ユーザーがフロートの代わりに整数を入力するようにする方法、またはフロート入力に & 記号を入力していないことを確認する方法です。

私はメモ帳でコードを書き、.c ファイルとして保存し、コマンド プロンプトで gcc を実行します。

4

3 に答える 3

0

最良の方法は、入力の行をfgets()で読み取り、その行を解析することです。数値入力の場合、整数のstrtol()および/または浮動小数点数のstrtod()は、使用する最も包括的な関数です。

例えば

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char line[100];
    char *err;
    int intval;

    printf("Enter a number:\n");
    fgets(line, sizeof line, stdin);

    errno = 0;
    intval = strtol(line, &err, 10);
    /* check for errors */
    if (errno) /* error */;
    if (*err != '\n') /* error */;

    return 0;
}
于 2012-09-18T20:21:08.010 に答える
0

さて、gcc についてのコメントから、C をプログラミングしていると思います。しかし、質問に入ると、 を使用している場合scanf、ほとんどすべてがチェックされます。使用方法を知っている必要があります。たとえば、次のようになります。

int main(void)
{
    float input;
    if(scanf("%f", &input) == 1)
    {
        printf("OK, I could read your float: %f.\n", input);
    }
    else
    {
        printf("Not OK, I couldn't read your float.\n");
    }
    return 0;
}

を入力5.4654すると、正しい番号が出力されます。そこにフロートがあり、文字まで行ったので、入力5.4&654すると出力されます。しかし、入力すると失敗し、フロートを読み取れませんでした。5.4&abc

これが機能する理由scanfは、データの読み取りに成功した回数を返すためです。したがって、 を要求"%f %f %d"する場合は、戻り値が3であるかどうかを確認する必要があります。そうであれば、邪魔になるが読み取られないランダムな文字にもかかわらず、すべてが正常に機能しました。

あるいは、整数型 (および類似の型) について言えば、 が提供する関数ctype.hを使用できます。

于 2012-09-18T15:45:07.627 に答える
0

ヘッダー ファイルctype.hで宣言された関数、特にfunction を使用できますisdigit

于 2012-09-18T15:32:16.047 に答える