【命令行提供参数】C语言-程序的参数由命令行输入

在这里插入图片描述

  • 苏格兰甜心修道院–一场光明正大的示爱
    人们都说巴黎是“爱之城”,但在这世界上还有一个鲜为人知的地方,以爱之名存在。这里是苏格兰一个名为新阿比的村庄,位于敦夫里斯以南约10公里处。走进这座名为甜心修道院的废墟吧,来一同见证那对生活于13世纪的夫妻之间的美好爱情。

▚ 01 程序介绍


  • 该程序的运行指令为:
EXE -w width -h height
  • 例如输入: 命令 ./a.out -w 10 -h 3
  • 输出: 面积。

在这里插入图片描述


▚ 02 源码示例



#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

typedef struct
{
	int height;
	int width;
}s_param;

void WarnMsg(const char * cmd)
{
	printf("\n**********************************\n");
	printf("%s [-w width>0 -h height>0 ]\n",cmd);
	printf("**********************************\n\n");
}

int GetParam(int argc, char *argv[], s_param *param)
{
	int opt,tmp;
	int flag=0;//the number of error param

	if(!argv || !param) 
	{
		printf("Input Error.\n");
		return -1;
	}
	memset(param, 0, sizeof(s_param));

	while(1) 
	{
		opt = getopt(argc, argv, "w:h:");
		if(opt == -1) 
		{
			break;
		}
		switch (opt) 
		{
			case 'w':
				if(optarg == NULL) 
				{
					printf("Need paramter for %c\n", optarg);
					WarnMsg(argv[0]);
					return -1;
				}
				tmp = atoi(optarg);
				if(tmp <= 0)
					++flag;
				param->width = tmp;
				break;
			case 'h':
				if(optarg == NULL) 
				{
					printf("Need paramter for %c\n", optarg);
					WarnMsg(argv[0]);
					return -1;
				}
				tmp = atoi(optarg);
				if(tmp <= 0)
					++flag;
				param->height = tmp;
				break;
			default:
				break;
		}		
	}
	if(flag > 0)
		return -1;
	return 0;
}

int PrintParam(s_param *param)
{
	if(param == NULL) 
		return -1;
	
	printf("Parameters:\n");
	printf("\t width = %d\n", param->width);
	printf("\t height = %d\n", param->height);
	
	return 0;
}

int main(int argc, char *argv[])
{
	int ret, area;
	s_param param;

	ret = GetParam(argc, argv, &param);
	PrintParam(&param);

	if(ret == 0)
		printf("\n area = %d\n", param.width * param.height);
	else
	{
		printf("\n parameters error!\n");
		WarnMsg(argv[0]);
	}

	return 0;
}

在这里插入图片描述


▚ 03 运行结果



这里写图片描述




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值