我想限制以下patient_id
变量可能具有的值(出于安全原因)。以下是我目前的代码,但我很确定这是错误的方法:
void addPatient(){
int patient_id;
printf("Enter ID between 10000 & 99999: ");
do{
scanf("%d", &patient_id);
}while((patient_id<10000)&&(patient_id>99999));
}
答案 0 :(得分:4)
除非您正在编写家庭作业问题的程序,特别是如果您正在编写一个程序,实际的人类用户将以任何严肃的方式与之交互,不要使用scanf()。一次在输入行上操作。如果您仍然想使用scanf()的'parsing',那么在拥有它之后,您可以在完整的输入行上使用sscanf()等。如果您不知道如何通过scanf()获取用户输入,一种简单的方法是将fgets()放入缓冲区,选择行,并为下一个fgets()准备缓冲区。
如果你坚持使用scanf(),我有一个挑战:用它来接受同一行上的两个ID,用空格分隔。如果用户只输入一个ID然后点击输入,您的程序应该在请求更多输入之前向用户投诉。
答案 1 :(得分:2)
你的病情应该是
while((patient_id < 10000) || (patient_id > 99999))
为此目的
答案 2 :(得分:2)
此代码应限制patient_id应具有的值。 到目前为止,这不是最有效的方法,但是如果你想使用scanf(),那么这可以完成这项工作。
#include <stdio.h>
int patient_id(void);
int main(void)
{
int id=0;
id = patient_id();
printf("\nThe patient_id is: %d\n", id);
}
int patient_id(void)
{
int p_id;
int ch;
printf("Enter ID between 10000 & 99999: ");
scanf("%d", &p_id);
while ((p_id <10000 || p_id >99999))
{
while((ch = getchar()) !='\n')
continue;
printf("Please enter a value between 10000 and 99999: ");
scanf("%d", &p_id);
}
return p_id;
}
答案 3 :(得分:2)
(1)您使用的支票是正确的; 。* scanf不知道整数范围限制。
(2)正如其他海报所述,scanf()不会产生良好的用户界面。使用readline()获取行和sscanf来解析它们,你会更快乐。
(3)出于安全考虑,您是否限制这些值?如果这实际上是一个安全问题, 不 应该是魔术数字,而是#defines或静态consts或全局变量,这样如果有人在不更新代码的情况下更改这些范围,那么您的安全性检查没有妥协。
答案 4 :(得分:1)
接受这些值时,无法控制输入值。您必须首先接受值,然后您可以检查条件接受的输入是否正确。您可以为错误的输入生成警告。
在上面的代码中,如果您希望patient_id
介于10000到99999之间,那么您的代码是正确的,但是用户将输入值,直到他/她输入正确的输入。
例如。 1,200124,45,9999,321, 12001 。 当用户输入12001时,您的prgm将停止接受输入。