标签: error-checking

C:参数检查时抛出错误还是让它击中风扇?

我有一个简单的设计(?)问题.

我正在编写一个简单的程序,它有几个看起来像这样的函数.

float foo (float* m,size_t n){

   float result;
   //do some calculations, for example a sum 


   return result / n;
}
Run Code Online (Sandbox Code Playgroud)

我对此有几个问题,无意重新开启一些圣战.

我应该加一个健全检查n吗?如果是这样,我应该如何让来电者知道?

回到-1上彩车看起来奇怪;

float foo(float *m,size_t n){
     if (n == 0) return -1f

     ...
  }
Run Code Online (Sandbox Code Playgroud)

我的另一个选择是out参数

float foo(float *m,size_t n, int *error){

        if (n==0){
           *error = 1;
            return 0f;
        }
       ...
}
Run Code Online (Sandbox Code Playgroud)

更新

这是一种玩具程序,只是试图练习一些东西.问题超出了这个事实.也许我应该改写为"如何在没有(OOP)异常的情况下处理错误".

n在打电话之前还考虑测试,但不喜欢它.

有什么想法吗?提前致谢.

c error-checking sanity-check

5
推荐指数
1
解决办法
1197
查看次数

有没有理由使用运行时断言而不是编译时断言?

在查看Visual C++代码库时,我发现了以下奇怪的事情.在编译时可以评估条件的情况下,使用运行时断言(检查条件并在违反条件时抛出异常):

assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );
Run Code Online (Sandbox Code Playgroud)

很明显,编译器将评估条件并替换有效的代码

assert( true );
Run Code Online (Sandbox Code Playgroud)

什么都不做或

assert( false );
Run Code Online (Sandbox Code Playgroud)

每次控件通过该行时都会抛出异常.

IMO应该使用编译时断言,原因如下:

  • 它会在编译时更早地暴露条件违规 - 和
  • 它会让清洁(因此更快,更小)的机器代码被发出

看起来像编译时断言是唯一正确的事情.有没有可能的理由在这里更喜欢运行时断言?

c++ assert error-checking visual-c++

5
推荐指数
1
解决办法
4582
查看次数

类和id名称中的拼写错误的预防工具

是否有任何基本的HTML/CSS/JavaScript调试工具可以帮助识别拼写错误?

有时"#fron"应为"#from".我不是在谈论代码本身,而是讨论类名和id这样的东西.

我知道有强大的IDE,但只是想知道是否有一些我根本不知道的相当基本的工具或扩展.

在我发布问题之前,我尝试彻底检查代码,但我是我自己最差的校对员.

html javascript css error-checking

5
推荐指数
1
解决办法
127
查看次数

创建一个空目录(NSIS)

我怎么能通过NSIS 2.46来做到这一点?

我知道这可能是一个愚蠢的问题,但我怎么创建一个空目录并检查错误?

我这样做:

ClearErrors
CreateDirectory $R1
${If} ${Errors} 
  DetailPrint "failed"
  MessageBox mb_IconStop|mb_TopMost|mb_SetForeground "Can not create folder $R1"
  Abort
${Else}
  DetailPrint "done"
${EndIf}
Run Code Online (Sandbox Code Playgroud)

如果变量$ R1是

  • "c:\ test" - 完成
  • "c:\ con" - 失败("con" - 在Windows上保留)
  • "qwer:\ test2" - 完成了
  • "qwer\test3" - 完成(没有":")

为什么"test2"和"test3"没有错误?

更新: 如何使它成为一个错误?

windows installer nsis error-checking create-directory

5
推荐指数
2
解决办法
5092
查看次数

如何检查int []是否只包含某些数字?

我需要检查int []是否只包含某些值(在本例中为0s和1s),如果不包含则抛出异常.

有没有比以下任何一种解决方案更有效的方法?

简单(但O(n)):

for(int n = 0; n < myArray.Length; n++)
    if(!(myArray[n] == 0 || myArray[n] == 1))
        throw new Exception("Array contains invalid values");
Run Code Online (Sandbox Code Playgroud)

使用Where():

if(myArray.Where(n => !(n==1 || n==0)).ToArray().Length > 0)
    throw new Exception("Array contains invalid values");
Run Code Online (Sandbox Code Playgroud)

c# arrays error-checking

5
推荐指数
1
解决办法
3122
查看次数

检查数组是否"正确"(C++)

一个正确的数组

假设我们有一个N长度的数组,由大写字母A,B和C组成.如果在数组中一个接一个地出现的每两个C字母之间,我们将数组称为"右数组",还有更多A字母比B字母.我的工作是发现一个给定的数组是否为"右",如果是,我要打印出"右",否则我就打印了给定的条件有多少个(以铯之间的位置)是不真实的(还有更多Bs比As).

输入:在第一行中,我们输入数组N中的lettes数(1 <N> 200).在下一行中,我们输入数组,中间没有空格.

输出:在一行中打印答案.

例子:

  • 输入:16 ABBCAABCACBAAACB输出:右

  • 输入:15 ​​ABBCABCACBAAACB输出:1

  • 输入:14 CABCABBCBAABBC输出:3

现在,我已经尝试解决这个问题,但是第三个例子对我不起作用 - 我得到2的输出,如上所述我应该得到3,除此之外 - 它编译完全没问题.

    #include <iostream>

using namespace std;

int main()
{
    int N;
    cin >> N;
    char Ar[N];
    int A = 0;
    int B = 0;
    int piece = 0;
    int attempt = 0;

    for (int i = 0; i < N; i++) {
        cin >> Ar[i];
    }

    for (int i = 0;  i < N; i++) {
        if (Ar[i] == 'C') { …
Run Code Online (Sandbox Code Playgroud)

c++ arrays element char error-checking

5
推荐指数
1
解决办法
236
查看次数

R - 检查函数中是否存在对象

假设我有一组x, y可能定义或未定义的变量.这些变量被传递给一个名为的函数test.

y <- 10
test <- function(a,b) { ifelse(a > b, "hello", "world") }
test(x,y)

# Error in ifelse(a > b, "hello", "world") : object 'x' not found
Run Code Online (Sandbox Code Playgroud)

如果我test(x,y)在x尚未实例化时调用,则R将抛出"对象'x'未找到"错误.

如果我添加了一个存在检查,该函数在从全局环境调用它时会起作用

y <- 10
test <- function(a,b) { 
     print(exists(as.character(substitute(a))))
     if (!exists(as.character(substitute(a)))) {a <- 0}
     ifelse(a > b, "hello", "world")  
}
test(x,y)

# [1] FALSE
# [1] "world"

x <- 11
test(x,y)

[1] TRUE
[1] "hello"
Run Code Online (Sandbox Code Playgroud)

但是,如果我test(x,y)blah函数内部换行.它无法找到现有变量.

rm(list=ls())
test <- function(a,b) …
Run Code Online (Sandbox Code Playgroud)

r error-checking

4
推荐指数
1
解决办法
1075
查看次数

传递大小作为参数VS在Fortran过程中假定形状

我想确定这两个选项中哪一个最好:

subroutine sqtrace( Msize, Matrix, Value )
  integer, intent(in)  :: Msize
  real*8,  intent(in)  :: Matrix(Msize, Msize)
  real*8,  intent(out) :: Value

  [instructions...]

end subroutine sqtrace
Run Code Online (Sandbox Code Playgroud)

VS

subroutine sqtrace( Matrix, Value )
  real*8,  intent(in)  :: Matrix(:,:)
  real*8,  intent(out) :: Value

  if ( size(Matrix,1) /= size(Matrix,2) ) then
    [error case instructions]
  end if

  [instructions...]

end subroutine sqtrace
Run Code Online (Sandbox Code Playgroud)

我知道当你使用警告进行编译时,如果调用sqtrace符合指示的大小,第一种情况应该在编译时自动检查.但是,我不知道编译器是否可以在给定参数可分配时执行这些检查(例如,如果此类分配依赖于在运行时确定的其他事项,则更多如此).第二个需要一个显式接口,并有更多的代码(检查),但似乎会捕获更多的错误.

使用每种情况的优点/缺点是什么?在哪种情况下,哪一种情况应该与另一种情况一起使用?

fortran allocation error-checking subroutine

4
推荐指数
1
解决办法
609
查看次数

业务逻辑中推荐不必要的错误处理吗?例如.空检查/百分比限制检查等

我们通常会在业务逻辑中进行不必要的检查以避免失败.

例如.

1. public ObjectABC funcABC(){

      ObjectABC obj = new ObjectABC;
     ..........
     ..........
     //its never set to null here.
     ..........
     return obj; 
} 

ObjectABC o = funABC();

if(o!=null){
//do something
}
Run Code Online (Sandbox Code Playgroud)

如果我们确定它永远不会为null,为什么我们需要这个null检查?这是一个好习惯吗?

2. int pplReached = funA(..,..,..);
   int totalPpl   = funB(..,..,..);

   funA() just puts a few more restriction over result of funB().


    Double percentage = (totalPpl==0||totalPpl<pplReached) ? 0.0 : pplReached/totalPpl;
Run Code Online (Sandbox Code Playgroud)

我们需要'totalPpl<pplReached'检查吗?

问题是:我们不是通过进行此类检查来吞下一些基本问题吗?通过进行这些检查可以避免理想地显示的问题.

推荐的方式是什么?

java error-handling error-checking

3
推荐指数
1
解决办法
332
查看次数

如何在不逐个单元循环的情况下使用VBA忽略范围内的绿色三角形误差?

我有一些大型数据集,我正在自动化和分发.我想消除那些警告用户关于存储为文本的数字的小绿色三角形.我使用了以下代码但是在大量工作表上它非常慢.

     Range(Cells(1, 1), Cells(lastrow, lColumn)).Select
     'kill those dang green cell triagles
     Dim rngCell As Range, bError As Byte
         For Each rngCell In Selection.Cells

             For bError = 3 To 3 Step 1

                 With rngCell
                     If .Errors(bError).Value Then
                         .Errors(bError).Ignore = True
                     End If
                 End With
             Next bError
         Next rngCell
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我已经把它减少到1/7的时间,没有循环遍历我想要阻止的每个错误,但它仍然非常慢.

我也已经知道了

     Application.ErrorCheckingOptions.NumberAsText = False
Run Code Online (Sandbox Code Playgroud)

但我不想使用它,因为我不想更改用户系统设置.我想要循环的效果而不循环遍历所有单元格.我可以告诉Excel如何在不逐个单元循环的情况下停止检查整个范围吗?

任何有效和快速的方法都会非常有帮助.先感谢您!!

excel vba error-checking

3
推荐指数
3
解决办法
2万
查看次数

我们是否将奇偶校验位添加到位集的前面或后面

我们是否将奇偶校验位添加到位集的前面或后面?作为对一组二进制值的检查的一个位,以这样的方式计算:集合中的1的数量加上奇偶校验位应该总是偶数(或者偶尔应该总是奇数).

bit-manipulation error-checking error-detection parity

1
推荐指数
1
解决办法
1813
查看次数

textFields上的无限焦点循环

我有2个JTextFields:

JTextField txtJobType, txtPriorityCode;
Run Code Online (Sandbox Code Playgroud)

这是我需要的功能:

当用户在txtJobType中键入"管理"并点击选项卡(或点击远离)时,将执行错误检查以查看该字段是否为空或输入的文本是否存在于数据库中.我这样做的方式是:

private void txtJobTypeFocusLost(java.awt.event.FocusEvent evt) {                                     
    System.out.println("JobType Focus Lost");
    if (!checkFieldExists(txtJobType.getText(), "jobType", "jobCode",
            JobType.class) || txtJobType.getText().isEmpty()) {
        txtJobType.requestFocusInWindow();
        txtJobType.selectAll();
    } else {
    }
} 
Run Code Online (Sandbox Code Playgroud)

因此,如果该字段不存在或文本为空,则将焦点返回到txtJobType并突出显示所有文本(如果有)

这没有问题.但是,我有txtPriorityCode字段需要具有完全相同的行为.所以我做了:

private void txtPriorityCodeFocusLost(java.awt.event.FocusEvent evt) {                                          
    System.out.println("PriorityCode Focus Lost");
    if (!checkFieldExists(txtPriorityCode.getText(), "priority", "priorityCode",
            Priority.class) || txtPriorityCode.getText().isEmpty()) {
        txtPriorityCode.requestFocusInWindow();
        txtPriorityCode.selectAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是问题开始的地方:如果用户将jobType和制表符保留为优先级,则代码会尝试将焦点返回到jobtype,但由于此时优先级也为空,它将尝试从jobtype返回焦点,从而产生此输出:

PriorityCode Focus Lost
JobType Focus Lost
PriorityCode Focus Lost
JobType Focus Lost
Run Code Online (Sandbox Code Playgroud)

任何有关如何实现此行为的帮助表示赞赏,因为我必须为至少10个其他文本字段执行此操作.

谢谢!

java swing focus error-checking infinite-loop

1
推荐指数
1
解决办法
530
查看次数

IfError with else,Excel中是否存在此函数?

在尝试帮助另一个问题的作者时,我(再次)遇到了我想要以下 Excel 函数的情况:

=IFERROR(value, value_if_error, value_if_no_error)
Run Code Online (Sandbox Code Playgroud)

换句话说,我正在寻找一个IFERROR()带有 else 子句的函数。
问题是:理论上可以按如下方式完成:

=IF(IFERROR(function(),error_value),value_if_error,value_if_no_error)
Run Code Online (Sandbox Code Playgroud)

但如果error_value是 的可能结果呢function()?这将导致无法使用IFERROR():egfunction()返回一个字符串,可以是任何内容,也可以是空字符串,但它也可能会生成错误。

编辑:一些澄清

让我举个例子吧:

=IFERROR(B3, "weird")
Run Code Online (Sandbox Code Playgroud)

在“B3”中,有一个函数,它返回一个字符串,但即使该字符串的值是“奇怪的”,这也没关系。如何区分错误情况和“奇怪”是正常正确结果的情况?

正如一张图片胜过千言万语:

在此输入图像描述

excel if-statement error-checking excel-formula

0
推荐指数
1
解决办法
6530
查看次数