shuofxz 发表于 2016-8-3 16:28:57

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;
}

疾风。意破天晴 发表于 2016-8-3 18:29:13

用 gets() 把参数存到一个数组里,相邻两个参数你可以用空格隔开,再判断个数,最后switch。

子煜从嘉 发表于 2016-8-3 19:14:07

{:10_277:}

Krant5 发表于 2016-8-3 20:33:17

本帖最后由 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;
}

shuofxz 发表于 2016-8-3 21:57:16

Krant5 发表于 2016-8-3 20:33
你想的好奇怪哦 ,应该是三个函数都定义之后,你调用函数的时候传入几个参数就会自动判断的

兄弟你没完全懂我的意思呀,输入的数是由用户来给的,所以需要判断呀,如果向你说的已经知道要计算什么数了,当然简单了。

最终要完成的效果应该是这样的,有什么办法么?

shuofxz 发表于 2016-8-3 22:26:47

疾风。意破天晴 发表于 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读到结尾直接跳出来,可是这样写也是会报错的。。。

还有一个问题就是我如何判断数组里面存入数的个数呢?

小剑剑 发表于 2016-8-4 08:48:34

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;

}

小剑剑 发表于 2016-8-4 08:49:12

shuofxz 发表于 2016-8-3 22:26
可是gets()的话是一次读取一行字符,包括空格
我查了一下get()这个函数貌似是符合要求的但是怎么用呀?
...

还有那个cin.get()是用于字符串的

shuofxz 发表于 2016-8-4 09:11:23

小剑剑 发表于 2016-8-4 08:48
这个满足要求吗??
当用户输入时由用户决定是否结束

这样确实是可以~

但我对cin还是有点疑惑
① 我输入三个数的时候,最后一定要敲回车才能结束,为什么敲空格不行?
② 为什么ctrl+z 可以结束cin?
③ 有没有什么读取字符串的方法是中间有空格就继续读取,遇到回车就结束的?

疾风。意破天晴 发表于 2016-8-4 09:16:36

gets()不会过滤空格,以回车为结尾,这是一个c语言函数,必须包含头文件<stdio.h>,,将字符串数字转化为整型数字用int atoi(const char *nptr);函数。这样的话就可以用空格判断参数个数。

小剑剑 发表于 2016-8-4 09:20:46

本帖最后由 小剑剑 于 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)

shuofxz 发表于 2016-8-4 15:34:57

疾风。意破天晴 发表于 2016-8-4 09:16
gets()不会过滤空格,以回车为结尾,这是一个c语言函数,必须包含头文件,,将字符串数字转化为整型数字用i ...

你的意思是:先用gets()读一整个字符串进来,然后用个循环去监测里面的空格,对字符串进行分片,然后在用atoi() 把字符转换为数字

shuofxz 发表于 2016-8-4 15:35:31

小剑剑 发表于 2016-8-4 09:20
1不敲空格字符就没有输入,c的话可以用getch,但c++我也才刚刚开始学,不太清楚
2ctrl+z时cin>>a,读取 ...

哦哦,明白了,谢谢~

超级无敌磊果果 发表于 2019-7-10 10:43:02

#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]
查看完整版本: C++如何判断输入了几个参数?