c语言中的用户输入过滤,如避免字母和符号

c语言中的用户输入过滤,如避免字母和符号,c,input,filter,C,Input,Filter,我需要计算年龄,然后在c编程中如何在scanf中进行“用户输入过滤” main() { scanf("%d %d %d ,month,date, year); --------; printf("your age is"...); } 在这里,用户可以输入字母表或一些符号,如何在c中过滤它们?我不确定这是否是您要寻找的-您可以使用atoi函数将用户输入转换为整数,并检查它们是否为有效整数。如果通过过滤,您的意思是删除有问题的字符,您可以读取缓冲区中的行并对其进行检查,也可以使用如下

我需要计算年龄,然后在c编程中如何在scanf中进行“用户输入过滤”

 main()
 {
 scanf("%d %d %d ,month,date, year);
 --------;
 printf("your age is"...);
 }

在这里,用户可以输入字母表或一些符号,如何在c中过滤它们?

我不确定这是否是您要寻找的-您可以使用
atoi
函数将用户输入转换为整数,并检查它们是否为有效整数。

如果通过过滤,您的意思是删除有问题的字符,您可以读取缓冲区中的行并对其进行检查,也可以使用如下快速破解:

scanf("%d%*[^0-9]%d%*[^0-9]%d", &month, &day, &year);
其中
*
后面的
%
表示读取和丢弃,括号中的
^0-9
表示非0到9的任何字符。可能的陷阱:如果第一个字符不需要,
scanf
将失败。如果在开头添加了
%*[^0-9]
,则以数字开头的输入失败

或者,如果出现故障,请用户正确输入(在前一种情况下,您还应检查
scanf
的返回值):


但是,在将用户输入转换为整数之后,我们如何检查整数的有效性呢?@WifuWifu:你不能。你必须先读入字符串,这样如果结果不是整数,你可以尝试用不同的方法解析它。你需要将读取和转换分成两个单独的步骤
fgets()
(不是
gets()
,因为它不可避免地会产生缓冲区溢出机会)读取输入,然后通过查看单个字符或使用
sscanf()
尝试多次解析输入。但这是非常容易出错的,而且我肯定有一些库用于解析日期,这将更加可靠。thankx bro正在工作…想投票支持你的答案…但我仍然很抱歉,我们可以输入像123213ew这样的值,这是接受的无错误消息returnedok解决了它。。scanf(“%d%*[^0-9]%d%*[^0-9]%d%*[^0-9]”,&month,&day,&year)@WifuWifu,我不确定添加
%*[^0-9]
是否是个好主意,因为它会消耗输入中的所有内容,直到一个数字。您应该对照3检查
scanf
的输出。对于输入,例如123213ew,
scanf
只读取一个数字,然后等待更多数字(即使您已经按下enter键,您仍然可以输入更多数字)。我不明白如何检查scanf的3…请解释
while (scanf("%d %d %d", &month, &day, &year) != 3)
{
    printf("bad input! Retry\n");
    /* possibly flush the line: */
    while (!feof(stdin) && fgetc(stdin) != '\n');
}