我必须编写一个接收参数的程序( ex:-in cypher/in/in2.txt -out cypher/out/out2.txt -key 0 -mode enc -alg caesar
),并且必须对“in”文件中的文本执行加密/解密操作并打印输出“out”文件。
因为我们学生很多,为了查看我们的课程,老师制作/下载了一个程序“检查器”,它提供了7个测试,例如示例中的测试,并将输出文件与一个名为ref的文件进行比较。 我已经完成了加密算法,但我遇到了一个问题:当我“手动”运行测试时(从cmd -introducing参数,或者只是将它们插入vs-proprieties-debugging),程序运行良好。它创建输出文件,与ref中的输出文件完全相同。但是当我运行检查程序时,程序不会创建输出文件。
我注意到一些有趣的东西,在我拥有源代码的文件夹中,在我运行检查器之后,它出现了一些文件,其中包含一些参数的名称( ex:-hint
,{{1没有扩展名),包含输出文件中应包含的内容。我在VS中使用过调试并检查了输出文件的名称,这是正确的。但是,当我“手动”运行它时,文件是正确构建的,当使用检查器时,它甚至不会创建它们。(该程序经过一些朋友的验证,似乎没有任何写作问题)。
here is a pic with the folder created after running the checker
这里我重建程序的第一部分只是为了解决输出问题;它不是完整的程序,但在第一次测试时,在检查器中它应该返回:缺少输入文件!
-alg
上面的函数用ASCII和对参数进行排序,然后立即对参数进行排序,以便我知道每个参数的确切含义
void ordonare_argumente(int n, char *p[]) {
int v[20];
int g[20], k = 0;
for (int i = 1; i < n; i++)
{
int sum = 0;
char *j;
j = p[i];
if (j[0] == '-') {
for (size_t u = 1; u < strlen(j); u++)
sum = sum + j[u];
k++;
v[k] = sum;
g[k] = i;
}
}
for (int i = 1; i <= k - 1; i++)
for (int j = i + 1; j <= k; j++)
if (v[i] > v[j]) {
char **pahar = (char**)malloc(1000);
int aux = v[i];
v[i] = v[j];
v[j] = aux;
pahar[g[i]] = p[g[j]];
p[g[j]] = p[g[i]];
p[g[i]] = pahar[g[i]];
pahar[g[i] + 1] = p[g[j] + 1];
p[g[j] + 1] = p[g[i] + 1];
p[g[i] + 1] = pahar[g[i] + 1];
free(pahar);
}
}