你好,谢谢你停下来。
通过使用专有代码找到了解决方案。有关使用过的代码,请参见 感谢大家的投入和帮助!
我对C编程很新(意思是我编写了一些非常基本的东西)。目前,我正在用C语言编写脚本。我尝试过搜索网站,但似乎没有任何示例适用于我的情况,或者根本不起作用。 它的作用基本上是打开一个文件(或一批多个文件),告诉主程序绘制所选字符串的图形(open_curve()是程序特定的函数)。
现在我的问题是其中一个字符串(比如下面代码中的string2)并不总是存在。当它丢失时,脚本会产生错误并退出。如何阻止这种情况发生? VBA有很多人厌恶的选择,但我认为它在这种情况下非常有用:On Error resume next。我知道它可能会丢失,在这种情况下它并不重要。当它在那里我需要它。当它不是,太糟糕......所以如果没有错误弹出并且值丢失,那就完全没问题了。 问题是,如何在C中获得类似的功能?
#define NMAX 10 // max. Anzahl Dateien
string n[NMAX]; // Global wegen Stack!
void main(void)
{
string *q;
int i,nmax=NMAX;
nmax=GetOpenFileName(n, nmax, "Daten-Dateien (*.DAT)", "*.DAT");
for (i=0, q=n; i<nmax; i++,q++)
{
ql.open_file(.file=*q);
close_curve();
open_curve(.name="\"String1\"");
open_curve(.name="\"String2\"");
open_curve(.name="\"String3\"");
printf("File %2d: %s\n",i,*q);
}
getch();
}
原型:
int [ql.]open_curve(.name = string[, .no = int,
.color = int, .lthick = int,
.linetype = int,
.marker = int, .drawall = int,
.markersize = float,
.bars = int, .ynull = float,
.ymin = float, .ymax = float,
.xmin = float, .xmax = float,
.yaxis = int, .xaxis = int,
.axis = int, .colsrc = int,
.xsignal = string, .csignal = string,
.index = string,
.xfrom = float, .xuntil = float,
.usemarker = int]);
守则,解决了我的问题: 现在,如果找不到,则返回空。
for (i=0, q=n; i<nmax; i++,q++)
{
ql.open_file(.file=*q);
close_curve();
open_curve(.name="\"String1\"");
Warninglevel = 2;
Errorlevel3 = 3; // Fehler nicht melden, weitermachen
err = open_curve(.name="\"String2\"");
Errorlevel3 = 0;
Warninglevel = 0;
open_curve(.name="\"String3\"");
printf("File %2d: %s\n",i,*q);
}
getch();
}
警告和错误级别说明如下:
extern int Warninglevel - Warnings will...
0 - Produce an Error box
1 - be ignored
2 - be ignored
extern int Errorlevel1 - Errors will...
0 - Produce an Error box (popup) and cancel script
1 - Produce an Error box and continue script 2 - ignored and cancel script.
答案 0 :(得分:0)
C中没有任何内容与On Error Resume Next
对应。
可以使用信号处理来捕获错误,但它不是在C中进行错误检查的首选方法。
相反,最佳做法是进行防御性编码。在使用之前,应检查允许NULL
的任何变量。
在您的情况下,代码可能如下所示:
char *name; // In reality
name = get_graph_name(); // Generate a name somehow, or null.
if (name != NULL) { // Only open the curve if we have a name.
open_curve(name);
}