如何检查用户输入是否适合变量?

时间:2016-12-20 21:02:08

标签: validation input fortran buffer-overflow

我正在尝试编写一个简单的程序来计算Fortran95 / 03的函数,它需要输入一个数字(x)并输出一个数字(y)。 用户输入为real :: input,读取调用类似于

read (*,*, iostat=stat) input
if(stat > 0) then
    print *, "False input, use numbers!"

iostat帮助我检查输入是数字还是字母。

我的问题是,如果我输入一个非常大的数字,如1000000000000,程序崩溃并显示错误消息“bufferoverflow”。我知道我可以使真正的大于4字节变量,但我也可以使输入数字更大,所以这不能解决问题。

主要问题是,是否可以防止程序因用户输入而崩溃?

2 个答案:

答案 0 :(得分:1)

检查用户输入的值是一种非常基本的技术,必须在与除了作者之外的其他人交互的各种软件中使用。它用于所有编程语言。

您可以使用简单的条件

if (input > input_max) then
  print *, "Input value too large, try again"
  cycle ! or return stop or set some flag or whatever
end if

不要忘记价值也可能太小了!

了解崩溃的来源非常重要。它当然不是来自输入大量数字而是以错误的方式使用数字,例如,分配太大的数组或通过进行触发浮点异常的计算。

答案 1 :(得分:1)

以字符串形式读取输入,然后验证字符串输入,然后使用内部读取将经过验证的字符串转换为REAL。

输入和输出处理器相关行为有很多方面,作为一般原则,如果你想要稳健性,那么你需要自己完成很多腿部工作。例如,如果提供了真实的格式错误输入,则不要求处理器将其识别为错误条件并返回非零IOSTAT代码。

列出定向输入提供了进一步的挑战,因为它具有许多令人惊讶的功能,可能会让您和您的用户失望。