Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 如何测试字符串输入?(戴亚洛APL)_Validation_Error Handling_Control Flow_Apl_Dyalog - Fatal编程技术网

Validation 如何测试字符串输入?(戴亚洛APL)

Validation 如何测试字符串输入?(戴亚洛APL),validation,error-handling,control-flow,apl,dyalog,Validation,Error Handling,Control Flow,Apl,Dyalog,我在做这个函数来练习控制流Happy测试一个数字是否是一个Happy数字。我还试图学习错误处理。因此,我尝试捕捉用户输入是否不是整数。尤其是当输入是字符串时。为此,我尝试合并标量测试,但无法在编辑器上进行测试,因为如果我尝试输入任何不带引号的字母,当然会出现值错误:未定义名称 此外,精通APL手册还警告不要使用Quad进行数据输入 测试输入是否为字符串的正确方法是什么?我假设用户将输入不带引号的字母 (我使用的是Dyalog APL 17.0) (我从中获取了关于如何将数字拆分为数字的代码?)

我在做这个函数来练习控制流
Happy
测试一个数字是否是一个Happy数字。我还试图学习错误处理。因此,我尝试捕捉用户输入是否不是整数。尤其是当输入是字符串时。为此,我尝试合并标量测试,但无法在编辑器上进行测试,因为如果我尝试输入任何不带引号的字母,当然会出现
值错误:未定义名称

此外,精通APL手册还警告不要使用Quad进行数据输入

测试输入是否为字符串的正确方法是什么?我假设用户将输入不带引号的字母

(我使用的是Dyalog APL 17.0)

(我从中获取了关于如何将数字拆分为数字的代码?)

快乐
“输入一个数字”
N←⎕
氮气←N

:如果N更新了答案

不用多说,这里有一个建议的解决方案:

 Happy;ok;N;N2
 'Enter a Number'
 ok←0
 :While ~ok
     N2←N←⍞  ⍝ N2=original input
     ok←∧/N∊⎕D,'¯.'  ⍝ allow high minus for negatives and decimal separator
     (~ok)/'Please enter numeric data!'
 :EndWhile
 N←2⊃⎕VFI N  ⍝ result of ⍞ will be text, so make it numeric
 N←⍬⍴N       ⍝ make it a scalar 
 :If N<0
     N←|N
     'You entered'N2
     'Only positive numbers can be happy'
     'We will check if'N'is happy'
     N2←N
 :EndIf
 f←10⊥⍣¯1⊢
 D←f N
 N←+/D×D

 :If N=1
     '***************'
     'Yes'N2'is happy!'
     '***************'
 :Else
     :While N≠1
         N←+/D×D
         D←f N
         N←+/D×D
         'N is:'N
         :If N=4
             '**********************************'
             'Sorry!'N2'is not a happy number'
             '**********************************'
             :Leave
         :EndIf
         :If N=1
             '**********************'
             'Yes!'N2'is a happy number'
             '**********************'
         :EndIf
     :EndWhile
 :EndIf
快乐;好啊N氮气
“输入一个数字”
好啊←0
:While~好的
氮气←N←⍞  ⍝ N2=原始输入
好啊←∧/N∊⎕D、 “'”⍝ 允许负数和小数分隔符使用高负数
(~ok)/“请输入数字数据!”
:EndWhile
N←2.⊃⎕vfin⍝ 结果⍞ 将是文本,因此将其设置为数字
N←⍬⍴N⍝ 让它成为标量

:如果N您应该使用
(字符输入;)而不是
<代码>⍞将为您提供用户输入的文本

input←⍞
然后可以使用
⎕VFI
(验证并修复输入;)以检查数字输入。它会给你一个由两个向量组成的向量。第一个是布尔值,用于参数中的每个“单词”。第二个向量是数字,每个字包含一个数字。无效字变为零

(valid values)←⎕VFI input
因此,如果要查找单个数字,请检查有效向量,然后可以检查是否为整数:

:If valid≢,1
:OrIf values≢⌊values
    'You entered: 'N'Enter an integer'
    →0
:EndIf
最后,您可以提取
N

N←⊃values

一些无关的建议
  • 记住通过在顶部列出变量来定位变量,每个变量前面都有一个
  • 对程序的其余部分使用
    :Else
    ,而不是
    →0以避免跳跃
  • 类似地,您可以通过将
    :EndWhile
    更改为
    :直到N=4
    来避免使用
    :Leave
    跳转
  • 如果您以肯定的形式陈述您的条件,代码可能更容易阅读
  • 为了避免不必要的间距,请将输出连接起来(使用
    ),而不是将其绞合(并置)
  • 在输出之前加上
    ⎕←使其更容易识别并提高清晰度
  • 快乐;输入;有效的;价值观NN2;FD ⎕←'输入一个数字' 输入←⍞ (有效值)←⎕VFI输入 :如果有效≡,1. :AndIf值≡⌊价值观 N←⊃价值观 氮气←N
    :如果N“Digits”。还有{Quad}A表示“Alphabet”,我感到困惑,因此这不是我在函数中用作
    D的D←fN
    我在哪里计算N的数字?好的,我已经从手机上回复了…但是我看到了其他需要提及的事情。今天晚些时候我会更新我的teply;)好的,谢谢。我试过了。它可以工作,但它捕捉到数字,其余的函数没有执行。谢谢!我正在研究你的答案。好的,所以我认为Quade的报价只花了一点时间字符串输入。但我看到用户可以输入数字输入,但Quote Quade将其转换为字符串:chars←⍞ 123 chars 123+/chars域错误。太好了!谢谢。特别是那些无关的建议。我明天会仔细阅读。
    N←⊃values
    
    Happy;input;valid;values;N;N2;f;D ⎕←'Enter a Number' input←⍞ (valid values)←⎕VFI input :If valid≡,1 :AndIf values≡⌊values N←⊃values N2←N :If N<0 N←|N ⎕←'You entered',N2 ⎕←'Only positive numbers can be happy' ⎕←'We will check if',N,'is happy' N2←N :EndIf f←10⊥⍣¯1⊢ D←f N N←+/D×D :If N=1 ⎕←'***************' ⎕←'Yes',N2,'is happy!' ⎕←'***************' :Else :While N≠1 N←+/D×D D←f N N←+/D×D ⎕←'N is:',N :If N=4 ⎕←'**********************************' ⎕←'Sorry!',N2,'is not a happy number' ⎕←'**********************************' :EndIf :If N=1 ⎕←'**********************' ⎕←'Yes!',N2,'is a happy number' ⎕←'**********************' :EndIf :Until N=4 :EndIf :Else ⎕←'You entered: ',input,' Enter an integer' :EndIf