C++如何判断输入了几个参数?
这个是小甲鱼老师视频中留的作业。
重载函数我已经写了出来,但是我如何判断用户输入了几个参数呢?
我想完成的是如下的步骤:
用户输入n个数 (1≤n≤3)
switch(用户输入的个数)
{
case 1:cal(a);
case 2:cal(a, b);
case 3:cal(a, b, c);
}
输出结果
重载函数如下:
int cal(int a)
{
int sum;
sum = a*a;
return sum;
}
int cal(int a, int b)
{
int sum;
sum = a * b;
return sum;
}
int cal(int a, int b, int c)
{
int sum;
sum = a + b + c;
return sum;
}
用 gets() 把参数存到一个数组里,相邻两个参数你可以用空格隔开,再判断个数,最后switch。 {:10_277:} 本帖最后由 Krant5 于 2016-8-4 12:50 编辑
我昨天也没想到什么好办法,只能用gets()读入字符串然后再判断转换成数字了。
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int cal(int i)
{
return i*i;
}
int cal(int i, int j)
{
return i*j;
}
int cal(int i, int j, int k)
{
return i+j+k;
}
int main()
{
char buf;
char tmp;
cout<<"please input n numbers (1<=n<=3):\n";
gets(buf);
char *p=buf;
int nCount=0;
int a;
while(nCount<=3)
{
while(*p==' ')
{p++;}
char *q=tmp;
while(*p!=' '&& *p!='\0')
{
*q++=*p++;
}
*q='\0';
a=atoi(tmp);
cout<<"a="<<a<<endl;
nCount++;
if(*p=='\0')
{
break;
}
}
switch(nCount)
{
case 1:
cout<<cal(a);
break;
case 2:
cout<<cal(a,a);
break;
case 3:
cout<<cal(a,a,a);
break;
default:
cout<<"error\n";
}
return 0;
}
Krant5 发表于 2016-8-3 20:33
你想的好奇怪哦 ,应该是三个函数都定义之后,你调用函数的时候传入几个参数就会自动判断的
兄弟你没完全懂我的意思呀,输入的数是由用户来给的,所以需要判断呀,如果向你说的已经知道要计算什么数了,当然简单了。
最终要完成的效果应该是这样的,有什么办法么?
疾风。意破天晴 发表于 2016-8-3 18:29
用 gets() 把参数存到一个数组里,相邻两个参数你可以用空格隔开,再判断个数,最后switch。
可是gets()的话是一次读取一行字符,包括空格
我查了一下get()这个函数貌似是符合要求的但是怎么用呀?
直接这样写会报错
int a;
cin.get(a, 3);
还有就是cin我觉得应该就可以,他不是遇到空格就会停么,所以写了如下程序
int i = 0;
while ( std::cin >> a && i<3 )
{
i++;
}
我想的是要么读完3个数,要么cin读到结尾直接跳出来,可是这样写也是会报错的。。。
还有一个问题就是我如何判断数组里面存入数的个数呢? shuofxz 发表于 2016-8-3 22:26
可是gets()的话是一次读取一行字符,包括空格
我查了一下get()这个函数貌似是符合要求的但是怎么用呀?
...
这个满足要求吗??
当用户输入时由用户决定是否结束
using namespace std;
int cale(int a)
{
cout<<a;
return a;
}
int cale (int a, int b)
{
cout<<a+b;
return a+b;
}
int cale (int a,int b,int c)
{
cout<< a+b+c;
return a+b+c;
}
int main()
{
int i=0,a;
while(i<3&&cin>>a)i++;
switch(i)
{
case(1):cale(a);
break;
case(2):cale(a,a);
break;
case(3):cale(a,a,a);
break;
default:break;
}
return 0;
} shuofxz 发表于 2016-8-3 22:26
可是gets()的话是一次读取一行字符,包括空格
我查了一下get()这个函数貌似是符合要求的但是怎么用呀?
...
还有那个cin.get()是用于字符串的 小剑剑 发表于 2016-8-4 08:48
这个满足要求吗??
当用户输入时由用户决定是否结束
这样确实是可以~
但我对cin还是有点疑惑
① 我输入三个数的时候,最后一定要敲回车才能结束,为什么敲空格不行?
② 为什么ctrl+z 可以结束cin?
③ 有没有什么读取字符串的方法是中间有空格就继续读取,遇到回车就结束的? gets()不会过滤空格,以回车为结尾,这是一个c语言函数,必须包含头文件<stdio.h>,,将字符串数字转化为整型数字用int atoi(const char *nptr);函数。这样的话就可以用空格判断参数个数。 本帖最后由 小剑剑 于 2016-8-4 09:22 编辑
shuofxz 发表于 2016-8-4 09:11
这样确实是可以~
但我对cin还是有点疑惑
1不敲空格字符就没有输入,c的话可以用getch,但c++我也才刚刚开始学,不太清楚
2ctrl+z时cin>>a,读取失败cin>>a返回false,需重置才可以继续输入
3可以用getline(char*,int) 疾风。意破天晴 发表于 2016-8-4 09:16
gets()不会过滤空格,以回车为结尾,这是一个c语言函数,必须包含头文件,,将字符串数字转化为整型数字用i ...
你的意思是:先用gets()读一整个字符串进来,然后用个循环去监测里面的空格,对字符串进行分片,然后在用atoi() 把字符转换为数字 小剑剑 发表于 2016-8-4 09:20
1不敲空格字符就没有输入,c的话可以用getch,但c++我也才刚刚开始学,不太清楚
2ctrl+z时cin>>a,读取 ...
哦哦,明白了,谢谢~ #include <iostream>
void Input(double x);
void Input(double x,double y);
void Input(double x,double y,double z);
int main()
{
double input;
int i=0;
std::cout<<"请输入1~3个参数:(以空格区别每一个字符,回车结束)";
while(std::cin.peek()!='\n'&&i<3)
{
std::cin>>input;
i++;
}
switch (i)
{
case 1:
Input(input);break;
case 2:
Input(input,input);break;
case 3:
Input(input,input,input);break;
}
std::cout<<"请输入任意字符结束!"<<std::endl;
//std::cin.get(); //去掉回车
std::cin.ignore(100,'\n');
std::cin.get();
return 0;
}
void Input(double x)
{
std::cout<<x<<"的平方是:"<<x*x<<std::endl;
}
void Input(double x,double y)
{
std::cout<<x<<'x'<<y<<'='<<x*y<<std::endl;
}
void Input(double x,double y,double z)
{
std::cout<<x<<'+'<<y<<'+'<<z<<'='<<x+y+z<<std::endl;
}结合前面几节课的知识和大家的知识完美解决 哈哈
页:
[1]