代码实现效果是:
在执行文件时
传入main函数的参数为1 打印三角
传入main函数的参数为1 1 打印菱形
传入main函数的参数为1 1 1 打印字母三角
传入main函数的参数为1 1 1 1打印字母菱形
代码如下
//只是我的兴趣,并无其它!
#include<stdio.h>
#include<stdlib.h>
void xin(int argc,char** argv); //打印星星
void Char(int argc,char** argv); //打印字母
int main(int argc,char** argv)
{
printf("该程序的执行名为:%s\n",argv[0]); //打印执行名 第一个参数一直保存执行程序名\
一直有argv[0]
switch(argc) //main函数的传递的参数个数
{
case 1:printf("少了!\n");break; //参数传递少了
case 4:
case 5:Char(argc,argv);//打印字母
case 2:
case 3:xin(argc,argv);break;//打印星星
default:printf("多了!\n");break; //参数传递多了
}
//当给main函数没有传参时,或者直传递一个去访问argv[2] 都会出现以下错误\
Segmentation fault (core dumped) 访问内存失败 ---访问main函数的参数是被保护的
return 0;
}
void xin(int argc,char** argv)
{
if(atoi(argv[1])==1) //打印三角形
{
int a;
printf("Input a numble:");
scanf("%d",&a);
char c='*';
int i;
for(i=0;i<=a;i++) //打印行数
{
for(int j=0;j<a-i;j++) //空格
{
printf(" ");
}
for(int j=0;j<2*i+1;j++) //星号
{
printf("%c",c);
}
printf("\n"); //换行
}
//if(argv[2] - '0'==1) //打印下半部分 有BUG \
atoi函数是将数字字符装欢成对应的数值 ---在stdlib.h中
if(argc<3) //如果参数少了 直接结束函数,少掉访问的错误
{
return;
}
if(atoi(argv[2])== 1) //打印下半部分
{
for(i=a-1;i>=0;i--) //打印行数
{
for(int j=0;j<a-i;j++) //空格
{
printf(" ");
}
for(int j=0;j<2*i+1;j++) //星号
{
printf("*");
}
printf("\n"); //换行
}
}
}
}
void Char(int argc,char** argv)
{
if(atoi(argv[3])==1)
{
printf("Input a chareset:");
//while(getchar()!='\n'); //等待回车 接收上一个输入的回车键
char a=getchar(); //接收这个输入的字符
char c;
if(a>=97) //小写
{
c='a';
}
else if(a>=65) //大写
{
c='A';
}
else if(a>=48) //数字
{
c='0';
}
else
{
printf("输入无效字符!\n");
return;
}
int n=a-c+1; //得到行数 加上本身
int i=1; //为了倒叙时变量可用
for(;i<=n;i++)
{
for(int j=0;j<n-i;j++) //空格
{
printf(" ");
}
for(int j=0;j<i;j++) //前半字母
{
printf("%c",c+j);
}
for(int j=i-1;j>0;j--) //后半字母 //减去本身的一个,防止再次打印中间的字母
{
printf("%c",c+j-1); //往下移动一个
}
printf("\n");
}
if(argc<5) //如果参数少了 直接结束函数,少掉访问的错误
{
return;
}
if(atoi(argv[4])==1)
{
for(i=n-1;i>0;i--) //倒三角
{
for(int j=0;j<n-i;j++) //空格
{
printf(" ");
}
for(int j=0;j<i;j++) //前半字母
{
printf("%c",c+j);
}
for(int j=i-1;j>0;j--) //后半字母 //减去本身的一个,防止再次打印中间的字母
{
printf("%c",c+j-1); //往下移动一个
}
printf("\n");
}
}
}
}
实现的效果如下: