好的,所以我想先说我对 C 知之甚少。我在高中独立学习它,所以我向你们寻求帮助。我正在使用 C1,但我不知道那是 # 还是 ++ 或者只是 C,甚至它们之间的区别是什么。无论如何,我的问题是如何确保用户输入整数而不是浮点数,或者确保该人没有在浮点输入中输入 & 符号。
我在记事本中编码并将它们保存为 .c 文件,然后在命令提示符下 gcc ,如果这能让您了解我正在使用的内容。
好的,所以我想先说我对 C 知之甚少。我在高中独立学习它,所以我向你们寻求帮助。我正在使用 C1,但我不知道那是 # 还是 ++ 或者只是 C,甚至它们之间的区别是什么。无论如何,我的问题是如何确保用户输入整数而不是浮点数,或者确保该人没有在浮点输入中输入 & 符号。
我在记事本中编码并将它们保存为 .c 文件,然后在命令提示符下 gcc ,如果这能让您了解我正在使用的内容。
好吧,根据您对 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
.
最好的方法是使用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;
}