1

好的,所以我想先说我对 C 知之甚少。我在高中独立学习它,所以我向你们寻求帮助。我正在使用 C1,但我不知道那是 # 还是 ++ 或者只是 C,甚至它们之间的区别是什么。无论如何,我的问题是如何确保用户输入整数而不是浮点数,或者确保该人没有在浮点输入中输入 & 符号。

我在记事本中编码并将它们保存为 .c 文件,然后在命令提示符下 gcc ,如果这能让您了解我正在使用的内容。

4

3 回答 3

0

您可以使用头文件ctype.h中声明的函数,尤其是函数isdigit

于 2012-09-18T15:32:16.047 回答
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

最好的方法是使用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 回答