笔记吕科,NET中Main函数使用小本领

By admin in 4858.com on 2019年5月3日

摘要:任何语言开采出来的程序,都会有七个主次入口函数,大概种种语言切磋所选择的先后入口函数称谓不等同,不过它们的意义都是一致的,都以被操作系统去调用。那么本文首要计算.NET中的程序入口函数Main使用的小技能。

函数叁要素:重回值、参数列表、表明

函数三要素:重返值、参数列表、注明

引言

近年在应用pandoc那些文书档案调换软件,可以对各类文档进行完美的调换,例如从markdown文件转为doc,ppt,tex,odt等等种种,感兴趣的能够从Pandoc下载,对于pandoc的的文书档案转变,都是应用cmd中的命令来实行操作的。现在本人急需把d盘的11贰3.md文本转变为docx文书档案,笔者只必要在cmd中输入上边包车型客车授命就可以达成。

4858.com 1

理所当然在设置pandoc的时候就早已把pandoc增多随景况变量中了,今后大家来分析一下以此命令pandoc 1123.md -o 1123.doc,将那个命令分为肆有个别,以空格进行分隔。pandoc为顺序名称,后边的1123.md、-0、1123.doc各自是传播那些顺序main函数中的三个参数。那种应用cmd命令来运作程序到达和谐目标对于作者来讲是相比好奇的,下边作者就动用.NET来兑现那种情势。

想要落成地方的那种效益,那么就不行的精通.NET中Main函数的选取了。首先,大家要知道.NET中等射程序Main是何许评释的。

壹函数的概念

main函数作为全部程序的输入,再次回到值给了他的父进度
char
argv[]指针数组:[]先期级异常高,argv[]表示数组,里面全数的因素是char花色,每一个main函数的参数都以字符串(char
)
直白给main函数字传送参,1空格表示3个参数的了断
strcmp相比较四个字符串大小strcmp(const char
s1, const char *s2)

形式、
//函数落成(定义)
float add(float a, float b)
{
float c = a + b;

return c;
// return a + b;
}

float sub(float a, float b)
{
return a – b;
}

float mul(float a, float b)
{
return a * b;
}

float div(float a, float b)
{
if (b == 0)
{
printf(“除数不能够是0.\n”);
//高精度向低精度隐式调换,会放弃数据。低精度向高精度隐式调换,结果更加准确。
// return -1;
// 甘休全体程序
_exit(0);
}

return a / b;
}

一函数的概念

main函数作为全部程序的入口,重临值给了她的父进度
char
argv[]指针数组:[]优先级非常高,argv[]代表数组,里面装有的元素是char品种,每一种main函数的参数都是字符串(char
)
4858.com,平素给main函数字传送参,一空格表示2个参数的停止
strcmp比较七个字符串大小strcmp(const char
s1, const char *s2)

形式、
//函数达成(定义)
float add(float a, float b)
{
float c = a + b;

return c;
// return a + b;
}

float sub(float a, float b)
{
return a – b;
}

float mul(float a, float b)
{
return a * b;
}

float div(float a, float b)
{
if (b == 0)
{
printf(“除数无法是0.\n”);
//高精度向低精度隐式转变,会丢掉数据。低精度向高精度隐式转变,结果越来越准确。
// return -1;
笔记吕科,NET中Main函数使用小本领。// 甘休全体程序
_exit(0);
}

return a / b;
}

一 Main函数的扬言

.NET中的Main的函数注解,并从未强调必须求以某种固定的格式举办宣示,下面那二种办法举办宣示都以能够的。

//no.1
static void Main(string[] args)
{
    Console.WriteLine("Hello World");
    Console.ReadKey();
}
//no.2
static void Main()
{
    Console.WriteLine("Hello World");
    Console.ReadKey();
}
//no.3
static int Main(string[] args)
{
    Console.WriteLine("Hello World");
    Console.ReadKey();
    return 1;
}

no.一是带参数无再次来到值,no.二是不带参数无重临值,no.三是带参有再次来到值的,不管哪一种注解方式,.NET都以允许的,这点不像Java中的Main函数证明,Java中的Main函数证明,必须假使带参数的,而且参数的必须如果String[] args,连args其壹参数名称都要平等。

但要注意的是,Main函数的函数名必须是大写早先的,即Main能够,而main不得以。我们要求再cmd中根据指令中传来的参数来实施顺序区别的成效,由此在此间大家挑选no.一那种证明方式。

2函数的宣示

形式
#include <stdio.h>
#include <unistd.h>

//函数的评释
float add(float a, float b);
float sub(float a, float b);
float mul(float a, float b);
float div(float a, float b);

二函数的扬言

形式
#include <stdio.h>
#include <unistd.h>

//函数的申明
float add(float a, float b);
float sub(float a, float b);
float mul(float a, float b);
float div(float a, float b);

2 使用带参数的Main函数

下边选代替码实现拍卖Program filename -o filename那种命令参数。代码如下:

static void Main(string[] args)
{
    if (args.Length == 3)
    {
        //第二个参数是-o,则把第一个参数的文档转为第三个参数的文档
        if (args[1] == "-o")
        {
            if (File.Exists(args[0]))
            {
                if (Check(args[2]))
                {
                    //进行转换的逻辑
                    Console.WriteLine("{0}—》{1}转换成功",args[0],args[2]);
                }
                else
                {
                    Console.WriteLine(args[1] + "不合法");
                }
            }
            else
            {
                Console.WriteLine(args[0]+"不存在");
            }
        }
    }
    Console.ReadKey();
}

上述代码就能够完成Program filename -o filename指令的处理。首先程序判定传入进来的参数是否四个,假如是四个,再剖断第3个参数是否文书档案转变命令-o,假如是更改命令就将率先个参数的文书档案转为第四个参数的文书档案。

下边测试一下先后,将先后的可实施文件复制到d盘和转移文书档案同一目录并改名称为MainUsage.exe。在cmd中输入MainUsage 1123.md -o 1123.docx,效果如下。

4858.com 2

注意:cmd中传唱的参数是以空格打开分隔的.

三函数的调用

形式 switch (ch)
{
case ‘+’:
ret = add(a, b);
break;

case ‘-‘:
ret = sub(a, b);
break;

case ‘*’:
ret = mul(a, b);
break;

case ‘/’:
ret = div(a, b);
break;

default:
printf(“error.\n”);
break;
}

三函数的调用

形式 switch (ch)
{
case ‘+’:
ret = add(a, b);
break;

case ‘-‘:
ret = sub(a, b);
break;

case ‘*’:
ret = mul(a, b);
break;

case ‘/’:
ret = div(a, b);
break;

default:
printf(“error.\n”);
break;
}

3 总结

万一想要为外界的次第提供本程序的1对明白API接口,那么就必要定义参数输入的鲜明,然后在Main函数遵照那一规定,接受并拍卖传入进来的参数,并给外界重临结果。通过那种方法,外界的次序能够批量的利用该程序提供的有个别职能。

专注 一般选择函数三种顺序

注意 一般选用函数二种顺序

【一 函数表明 调用 定义 二 概念 调用】

【一 函数表明 调用 定义 2 定义 调用】

不带参数的宏定义:
#define 宏名 字符连串
#define FALSE 0

带参数的宏定义:
#define 宏名(形参表) 字符系列
#define MAX(a,b) ( (a) > (b) ) ? (a) : (b)

裁撤宏定义:
#undef 宏名

不带参数的宏定义:
#define 宏名 字符体系
#define FALSE 0

带参数的宏定义:
#define 宏名(形参表) 字符种类
#define MAX(a,b) ( (a) > (b) ) ? (a) : (b)

注销宏定义:
#undef 宏名

带参宏和内联函数

一对说话相当短小,作用相比较简单的函数,能够用宏定义实现,提升成效。
宏定义只是替换,未有调用费用(栈空间的接纳),函数有付出。
函数会检讨你的参数列表和重返值类型,而宏定义没有项目,也就不会检讨

带参宏和内联函数

一对话语比比较短小,成效比较轻便的函数,能够用宏定义达成,升高功用。
宏定义只是替换,没有调用成本(栈空间的施用),函数有开垦。
函数会检查你的参数列表和重回值类型,而宏定义未有项目,也就不会检查

带参宏和平常函数

一、能不负众望相接近的意义
贰、函数会检讨你的参数列表和重临值类型,而宏定义未有项目,也就谈不上检讨
三、宏定义只是替换,未有调用开支,函数有开辟。

带参宏和常见函数

1、能成就相接近的效果
二、函数会检讨你的参数列表和再次来到值类型,而宏定义未有项目,也就谈不上检查
叁、宏定义只是替换,未有调用成本,函数有付出。

/ 高仿shell

#include <stdio.h>
#include <string.h>
//定义一些大家温馨的吩咐
#define ls_ “ls123″
#define pwd
“pwd123″
#define mkdir
“mkdir_123”
//自定义命令个数
#define NUM 3
//每一种命令支持最大字符个数
#define CNT 100

//全局变量,3行十0字符的数组, 暗中认可是全为0
char buf[NUM][CNT];

//进行指令初步化
void initcommand(void)
{
strcpy(buf[0], ls
);
strcpy(buf[1], pwd);
strcpy(buf[2], mkdir
);
}

int main(void)
{
//定义3个输入指令的字符数组
char cmd[CNT];

memset(cmd, 0, sizeof(cmd));

//开始化命令
init_command();

//工作
while (1)
{
printf(“[root@]# “);
//输入指令
scanf(“%s”, cmd);

//查找命令
int i = 0;

for (i=0; i<NUM; i++)
{
if (!strcmp(buf[i], cmd))
{
printf(“%s是合法命令:%s.\n”, cmd, buf[i]);
break;
}
}

if (i >= 3)
{
printf(“%s是地下命令,请重新输入.\n”, cmd);
}
}

return 0;
}

/ 高仿shell

#include <stdio.h>
#include <string.h>
//定义一些我们和睦的下令
#define ls_ “ls123″
#define pwd
“pwd123″
#define mkdir
“mkdir_123”
//自定义命令个数
#define NUM 3
//各类命令扶助最大字符个数
#define CNT 100

//全局变量,3行十0字符的数组, 默许是全为0
char buf[NUM][CNT];

//举办指令开始化
void initcommand(void)
{
strcpy(buf[0], ls
);
strcpy(buf[1], pwd);
strcpy(buf[2], mkdir
);
}

int main(void)
{
//定义几个输入指令的字符数组
char cmd[CNT];

memset(cmd, 0, sizeof(cmd));

//早先化命令
init_command();

//工作
while (1)
{
printf(“[root@]# “);
//输入指令
scanf(“%s”, cmd);

//查找命令
int i = 0;

for (i=0; i<NUM; i++)
{
if (!strcmp(buf[i], cmd))
{
printf(“%s是官方命令:%s.\n”, cmd, buf[i]);
break;
}
}

if (i >= 3)
{
printf(“%s是地下命令,请重新输入.\n”, cmd);
}
}

return 0;
}

行缓冲

出口行缓冲:
以\n为出口截止标记符,若未有该换行符,则将直接运算至缓冲区填满后或运算截止后1并输出。
输入行缓冲:
以\n为输入完结标志符,若不键入换行符,则直接等候输入。

行缓冲

输骑行缓冲:
以\n为出口截至标记符,若未有该换行符,则将从来运算至缓冲区填满后或运算甘休后共同输出。
输入行缓冲:
以\n为输入实现标志符,若不键入换行符,则一向守候输入。

精度转变

暗许低精度向高精度变换
高精度向低精度转变会丢掉数据

0代表数字零
‘/0’代表字符串的完工
‘0’代表字符0

strcmp strcpy strcat
a,b两组字符串
strcmp ( a , b )
将七个字符串进行对照,相等重回值为0,a大于b重临值正数,a小于b重返值为负
strcpy ( a , b ) 将字符串b复制到字符串a上
strcat ( a , b ) 将字符串b追加在字符串a前边

递归函数的行使

1阶乘
4858.com 3

2fibo

4858.com 4

4858.com 5迭代函数的使用

求十0 之内的和4858.com 6
4858.com 7

精度转变

暗许低精度向高精度转变
高精度向低精度转变会丢掉数据

0代表数字零
‘/0’代表字符串的截止
‘0’代表字符0

strcmp strcpy strcat
a,b两组字符串
strcmp ( a , b )
将五个字符串进行自己检查自纠,相等返回值为0,a大于b重回值正数,a小于b重回值为负
strcpy ( a , b ) 将字符串b复制到字符串a上
strcat ( a , b ) 将字符串b追加在字符串a后边

递归函数的利用

1阶乘
4858.com 8

2fibo

4858.com 9

4858.com 10迭代函数的施用

求十 之内的和4858.com 11

4858.com 12

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有