JBTALKS.CC

标题: 关于Data Validation ... 求助 [打印本页]

作者: K_POP    时间: 2013-3-26 12:18 PM
标题: 关于Data Validation ... 求助
程序出现选项给用户选...

1. XXXX
2. YYYY
3. ZZZZ


自然而然, 就会用char来 declare...

我虽然做到当用户输入 4 , 5 ,6 或其他单数字时显示error...

但是如果 用户 输入12, 13, 22, 等双位数字时, 就不会显示error, 而且还会proceed...

到底要怎样呢??

还有一个问题就是

我让用户输入一组数字...但是必须在范围里面
Please enter the height :
<min = 0 | max = 200>


我用while来做validation...输入不再范围的数字虽然可以显示error
但是一输入字母如: A , B, C
就会出现infinite loop ...

请问又要怎样解决呢?
作者: leon_lcl    时间: 2013-3-26 12:27 PM
可以用regular expressions 来弄
作者: tomiverson    时间: 2013-3-26 01:16 PM
本帖最后由 tomiverson 于 2013-3-26 01:18 PM 编辑

可以试试看用 isnumeric

if isnumeric(xxx) = true then
  msgbox("is numeric")
else
  msgbox("Not numeric")
end if

第二的,也是可以用isnumeric来check
if isnumeric(textbox.text) = true then
   if convert.tointeger(textbox.text) => 0 or convert.tointeger(textbox.text) <= 200 then
     msgbox("Pass")
   else
     msgbox("Failed")
   end if
else
   msgbox("Data is not number")
end if


作者: K_POP    时间: 2013-3-26 01:57 PM
本帖最后由 K_POP 于 2013-3-26 02:02 PM 编辑
tomiverson 发表于 2013-3-26 01:16 PM
可以试试看用 isnumeric

if isnumeric(xxx) = true then


有包括在<stdio.h> library 吗?

抱歉我是c 语言
作者: K_POP    时间: 2013-3-26 01:59 PM
leon_lcl 发表于 2013-3-26 12:27 PM
可以用regular expressions 来弄

抱歉, 我找了很多关于 regular expression的文章来看还是看不懂....

其实我是个菜鸟...目前连pointer都搞不清楚....唉...
作者: leon_lcl    时间: 2013-3-26 02:08 PM
K_POP 发表于 2013-3-26 01:59 PM
抱歉, 我找了很多关于 regular expression的文章来看还是看不懂....

其实我是个菜鸟...目前连pointer都 ...

C++?
看看这里http://www.cplusplus.com/reference/cctype/
作者: K_POP    时间: 2013-3-26 03:06 PM
leon_lcl 发表于 2013-3-26 02:08 PM
C++?
看看这里http://www.cplusplus.com/reference/cctype/

做不到...

首先, 第一个问题...

因为当我输入两位数的数字, 他还会proceed, 这根本不管是不是digit的问题不是吗?
他一定是号码嘛...才会说是两位数的数字.....

第二个问题....那个height 是declare as int .... 我用isdigit根本不管用....是不是isdigit只能用在char???


作者: K_POP    时间: 2013-3-26 03:10 PM
leon_lcl 发表于 2013-3-26 02:08 PM
C++?
看看这里http://www.cplusplus.com/reference/cctype/

还有是C 语言, 不是C++

while(((height < 0)||(height > 200))||(!(isdigit(weight))))
        {
                if(isdigit(height))
                {
                        printf("\nPlease enter the height between 0 to 200 !\n");
                        printf("Please enter the height\n");
                        printf("(Min = 0  |  Max = 200)\n>>");
                        scanf("%d",&height);
                }
                else
                {
                        printf("\nPlease enter the height in digit form.\n");
                        printf("Please enter the height\n");
                        printf("(Min = 0  |  Max = 200)\n>>");
                        scanf("%d",&height);
                }
        }


如果我输入不在范围的数字...例如300, 他会display
"Please enter the height in digit form."
如果我输入字母,又infinite loop

作者: K_POP    时间: 2013-3-26 04:15 PM
没有人可以帮我解除困惑吗?
作者: tomiverson    时间: 2013-3-26 04:28 PM
我找到这个,你或许可以试试看

http://www.dreamincode.net/forum ... ariable-is-integer/

isalpha : Checks if parameter is either an uppercase or a lowercase alphabetic letter.
isdigit : Checks if parameter is a decimal digit character.
isalnum : Checks if parameter is either a decimal digit or an uppercase or lowercase letter.
作者: K_POP    时间: 2013-3-26 05:52 PM
tomiverson 发表于 2013-3-26 04:28 PM
我找到这个,你或许可以试试看

http://www.dreamincode.net/forums/topic/53355-c-check-if-variable-is ...

第一, isdigit 正如我上面说, 还是不能正常走啊~

所以我才怀疑是不是只能给char用...

第二, 我第一个问题虽然是char, 但是要的效果是即使输入2或更多位数的数字时,可以display error...

这三个好像是不行吧?

恕我愚蠢...
作者: tomiverson    时间: 2013-3-27 10:04 AM
本帖最后由 tomiverson 于 2013-3-27 10:06 AM 编辑
K_POP 发表于 2013-3-26 05:52 PM
第一, isdigit 正如我上面说, 还是不能正常走啊~

所以我才怀疑是不是只能给char用...


让我搞清楚你要的

1. 你要只是让user key in alphabet吗? 如果有任何数字就return error?这个declare as char的话,应该可以用isdigit()来看是不是numeric, 是的话就return error?

2. 你的input是直接store 进那个integer declare吗?如果是,何不先store 进去char然后用isdigit()来verify是不是numeric后再store进去integer呢?

根据我找到的,在 http://stackoverflow.com/questio ... s-integer-type-in-c 。他说
a)If the input string starts with a valid integer (such as "12abc"), then the "12" will be read from the input stream and converted and assigned to num, and scanf will return 1, so you'll indicate success when you (probably) shouldn't;

b) If the input string doesn't start with a digit, then scanf will not read any characters from the input stream, num will not be changed, and the return value will be 0;

我不知道是不是你现在面对的问题。

找到这个,应该对你有用
http://www-control.eng.cam.ac.uk ... string_details.html
作者: K_POP    时间: 2013-3-28 05:58 PM
tomiverson 发表于 2013-3-27 10:04 AM
让我搞清楚你要的

1. 你要只是让user key in alphabet吗? 如果有任何数字就return error?这个decl ...


1. 我让user输入数字, 但是在code里面是char type...虽然user打alphabet会出error....但是user输入13 (注:我只让user选'1' 和'2') program会照拿第一个数字...也就是'1'...

2. 抱歉....发现isdigit的位置很小...我要输入六位数就不行了..我放弃使用isdigit..后来我加个fflush(stdin)就解决了...虽然听说这方法是个不好的习惯....但是目前解决我的问题了....

还有就是, 我把第一个问题的char换去int, 再加fflush(stdin) <===为了阻止infinite loop...


作者: tomiverson    时间: 2013-3-29 09:46 AM
K_POP 发表于 2013-3-28 05:58 PM
1. 我让user输入数字, 但是在code里面是char type...虽然user打alphabet会出error....但是user输入13 ( ...

所以第一题是类似menu 选择1,2,3 这样吗?

是的话,用switch 就可以啦

switch( input )
{
    case 1:
        select 1;
        break;
    case 2 :
        select 2;
        break;
    case 3:
        select 3;
        break;
    default : (如果不是key in 1,2,3)
       return error message;
}
作者: K_POP    时间: 2013-3-29 03:58 PM
本帖最后由 K_POP 于 2013-3-29 04:03 PM 编辑
tomiverson 发表于 2013-3-29 09:46 AM
所以第一题是类似menu 选择1,2,3 这样吗?

是的话,用switch 就可以啦


你完全明白了~~

我就是用switch case....

我第一次给user选 1 和 2

第二次选 1 到 6

第三次 也是1 到 6

如果输入 12

他会帮你选第一个是 1

第二个 是 2 ...

因为char只read 一个东西...你输入两个他会auto read第一个而已...第二个自然就被第二个选项read
作者: tomiverson    时间: 2013-4-1 08:47 AM
K_POP 发表于 2013-3-29 03:58 PM
你完全明白了~~

我就是用switch case....

所以你的第一题换去int之后解决了吗?
作者: K_POP    时间: 2013-4-1 09:51 PM
tomiverson 发表于 2013-4-1 08:47 AM
所以你的第一题换去int之后解决了吗?

是解决了...可是fflush(stdin)酱用对的吗?




欢迎光临 JBTALKS.CC (https://www.jbtalks.cc/) Powered by Discuz! X2.5