【发布时间】:2021-07-05 10:50:10
【问题描述】:
看一下这段代码,它应该以属于结构的三个变量的形式获取用户的出生日期。
printf("Insert date of birth in this format: dd/mm/yyyy\n");
scanf("%d/%d/%d", &user.bDay, &user.bMonth, &user.bYear);
while(isalpha(user.bDay)==1||isalpha(user.bMonth)==1||isalpha(user.bYear)==1){
puts("Invalid input");
scanf("%d/%d/%d", &user.bDay, &user.bMonth, &user.bYear);
}
如果用户输入字符怎么办?像 1q/02/199i 这样的东西?我想让程序打印一条错误消息,并简单地要求用户再次插入他的出生日期。 正如您在代码中看到的那样,我尝试使用 isalpha 函数,但它不起作用,程序崩溃并无限次打印“Invalis input”。如何让用户只插入整数?
【问题讨论】:
-
查看
scanf的返回值。 -
使用
isalpha(user.bDay)等是没有意义的,因为这些值应该是int类型(以匹配%d格式)并且要么是@ 转换的结果987654326@(如果成功)或未修改(如果不成功)。检查有效输入的一种选择是使用fgets将整行读取为字符串,并在使用sscanf转换值之前检查有效输入。当然有不同的方法来实现这一点。一般来说,scanf不应该用于必须检查的用户输入,而只能用于保证具有特定格式的输入。