C++ 命令行传参 参数使用 坐标参数的转换

1. 什么是命令行传参

命令行传参就是在 cmd 命令提示符, 或者 Linux shell 中使用可执行程序时, 可以添加 参数 传递到执行程序中。

image

程序根据你的输入做出反应。

这个东西没那么神秘,每一个编写过C++, C 程序的同志都见过它,却没有认识到它!

2. 如何传参

#include<iostream>
use namespace std;
int main(int argc, char * argv[]){
	cout<<argc<<"\t"<<argv[0]<<"\t"<<argv[1]<<"\t"<<argv[2]<<"\t"<<argv[3]<<endl;
	return 1;
}

image

argc:参数个数;
argv[]: 参数数组;每一个参数字符串最后都会自动添加 \0

int main(int argc, char * argv[])
int main(int argc, char ** argv)

这两个的效果是一样的!

3. 应用实例

传递字符坐标参数 并解析为数字坐标

#include<iostream>

int main(int argc, char * argv[]){
	std::cout<<argv[0]<<std::endl;
	std::cout<<argv[1]<<std::endl;
	std::cout<<argv[2]<<std::endl;
	std::cout<<argv[3]<<std::endl;

	int point[3][2] = {0};  // Multidimensional array initialization assigment 

	int j=0, i=0;
	for (int param=1; param<argc; param++){	// extract ith_coordinate_param (x,y)
		
		for (i=0; argv[param][i]!='\0'; i++){
			
			if(argv[param][i] >= '0' && argv[param][i] <= '9'){
				
				point[param-1][j] *= 10;
				point[param-1][j] += argv[param][i] - '0';	// automatic type conversion char to int
				
				if(!(argv[param][i+1] >= '0' && argv[param][i+1] <= '9')){	// x next isn't a number, so we extract y
					j++;
				}
			}
		}
		j=0;
	}
	
	for(i=0; i<3; i++){
		for(j=0; j<2; j++){
			std::cout<<point[i][j]<<" ";
		}
		std::cout<<"\n";
	}
	
	return 1;
}

image

4. 问题

传递到函数中的参数都是字符串类型的。那么我们怎么将他们变成数字类型呢?

在头文件 stdlib.h 中定义了这么几个函数我们可以使用!

double atof(const char *str) //converts the string argument str to a floating-point number (type double).

int atoi(const char *str) //converts the string argument str to an integer (type int).

double param = atof(argv[1]); 
int param = atoi(argv[1]);

文章会随时改动,要到博客园里看偶。一些网站会爬取本文章,但是可能会有出入。
转载请注明出处哦( ̄︶ ̄)↗ 
https://www.cnblogs.com/asmurmur/

posted @ 2022-03-08 18:38  Dba_sys  阅读(412)  评论(0编辑  收藏  举报