C语言 切换情况和一个全局变量为每个情况



我正在处理一个开关箱的问题。项目说明:主要(命令行参数个数,argv)。

  • argv在switch语句中导致case。根据输入,将输入相应的大小写,并执行相应的函数。→输出总是一个结构体,具有不同的内容。允许多个输入(即main.c case1 case3) ->
  • 我的问题是处理这些数据的传递,并将其保存在一个全局变量中,以便打印集合. 在一个案例中,我将局部结果传递给全局变量,但在案例的break语句之后,全局再次以NULL开始,不包含执行案例的信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "m.h"
output* print;
int main(int argc, char* argv[])
{
output_g* global; // global_struct
if(argc > 1)
{
global= create_global(argc-1); // allocation for global struct
for(int j = 0; j < argc; j++)
{    
switch (atoi(argv[i]))
{
case 123:
{

output* print= 123();
if(print== NULL)
{

return 0;
}
global = fill_global(global ,print); // hands over the current struct to the global struct

delete(print); // free function 

}
break;

case 456:
{
output* print= 456();
if(print== NULL)
{

return 0;
}
global = fill_global(global ,print); // hands over the current struct to the global struct

delete(print); // free function 

}
break;
case 789:
{
lfnr++;
output_1* print_liste = 789();
if(print== NULL)
{

return 0;
}
global = fill_global(global ,print); // hands over the current struct to the global struct

delete(print); // free function

}
break;

default:
break;
}
print_global_struct(file,globale_liste);
delete_global(globale_liste);

}//End for-Schleife
}// End If
return 0;
}

a)如果我理解正确的话,你不理解switch语句:)switch语句类似于嵌套的if语句。所以. .

int = 10;开关(x)案例1://不发生,x不等于1例10://发生……毕竟x仍然是10,除非在case语句中显式地改变它。案例只是检查如果x是一个值,它不会设置一个值。对于代码中的任何其他变量也是如此,上面的代码也不会修改y,除非你在一个case中显式地赋值它,否则它不会改变。

b)最好不要在case语句中声明locals。它们会变得很不稳定。标准的c++规则是有效的:在{}对内声明的变量的作用域在{}对内,因此正确使用它们将正确地为每种情况提供正确的作用域。因此,如果应用大括号,它将像预期的那样工作。你不应该在一种情况下声明一个局部,在另一种情况下使用它,即使你可以让它工作(你可以),它是容易出错的,在以后编辑代码可能会破坏东西,代码可能会混淆阅读和工作,这通常是一个坏主意。

一个例子:

int main()
{
int x = 3;
switch(x)
{

case 1: int y;
case 2: y = 3;
case 3: y = 5;  
cout << y << endl;
};
}

为我编译并运行,打印5。它工作得很好——我没有预料到,使用g++ c17选项。我仍然认为,就阅读和遵循意图而言,这是一件坏事。如果你在int y语句周围加上{},它将不再编译。如果在case 1和case 2后面加上break,它将不再编译。因此,至少要做到这一点,编辑是很"脆弱"的。

c)运行时不会丢失任何东西。我的程序连续运行了几个月。卷入案件对这一点也没有影响。丢失变量的风险是所有程序都面临的"ram"风险。如果一个长时间运行的程序被停电或故障等杀死,你失去了任何没有保存到文件,必须重新开始。长时间运行的程序应该定期保存它们的状态,以防止这种情况发生。

相关内容

  • 没有找到相关文章

最新更新