使用cin的输入在开关盒中不起作用

时间:2017-09-05 06:51:40

标签: c++ switch-statement cin

我正在创建一个程序,要求用户回复以及您要打印回复的时间并显示它。我在程序中使用了while循环和switch case。 但是当我在a的帮助下将输入存储在变量std::cin中时,交换机案例不会收到相同的输入。任何帮助表示赞赏。

#include <iostream>

using namespace std;

int a;
int input;
int i=1;
void display()
{
    cout << "Select a choice for reply" << endl;
    cout << "1.Thank You" << endl;
    cout << "2.Welcome" << endl;
    cout << "3.Okay" << endl;
}

int main()
{
    display();
    cout << "Enter Choice" << endl;
    cin >> a;
    input='a';
    switch (input)
    {
        case '1': {
            int x;
            cout << "Enter no. of times  you want to print reply line" << endl;
            cin >> x;
            while (i <= x)
            {
                cout << "Thank you" << endl;
            }

            break;
        }
        case '2': {
            int x;
            cout << "Enter no. of times  you want to print line" << endl;
            cin >> x;
            while (i <= x)
            {
                cout << "Welcome" << endl;
            }

            break;
        }
        case '3': {
            int x;
            cout << "Enter no. of times  you want to print line" << endl;
            cin >> x;
            while (i <= x)
            {
                cout << "okay" << endl;
            }

            break;
        }
        default: {
            cout << "wrong choice" << endl;
        }

        cout << "Thank you for replying" << endl;
    }

    return 0;
}

4 个答案:

答案 0 :(得分:3)

核心问题是:

input = 'a'

case '1':

你可能想要的是:

input = a

case 1:

毕竟编译器应该抛出警告。 但为什么要复制价值呢? 只是做

switch(a)

实际上,您的代码存在许多问题,但我会让其他人详细说明。

答案 1 :(得分:0)

您的问题是input='a';,输入值为97,如果您写input = (int)'a';

,则相同

为什么要声明'a'变量?只需使用输入     cin >> input;

答案 2 :(得分:0)

#include <iostream>
using namespace std;
int a;
int input;
int i=1;
void display()
{
    cout<<"Select a choice for reply"<<endl;
    cout<<"1.Thank You"<<endl;
    cout<<"2.Welcome"<<endl;
    cout<<"3.Okay"<<endl;
}

int main()
{
    display();
    cout<<"Enter Choice"<<endl;
    cin>>a;
    input=a;
    switch(input)
    {
        case 1 :
        {
            int x;
            cout<<"Enter no. of times  you want to print reply 
            line<<endl;
            cin>>x;
            while(i<=x)
            {
                cout<<"Thank you"<<endl;
                x--;
            }
            break;
        }
        case 2 :
        {
            int x;
            cout<<"Enter no. of times  you want to print line" <<endl;
            cin>>x;
            while(i<=x)
            {
                cout<<"Welcome"<<endl;
                x--;
            }
            break;
        }
        case 3 :
        {
            int x;
            cout<<"Enter no. of times  you want to print line"<<endl;
            cin>>x;
            while(i<=x)
            {
                cout<<"okay"<<endl;
                x--;
            }
            break;
        }
        default:
        {
            cout<<"wrong choice"<<endl;
        }
        cout<<"Thank you for replying"<<endl;
    }
    return 0;
}

答案 3 :(得分:0)

您的代码中有几个问题:
1)你试图给一个字符整数:input = 'a';
为了做得对,你应该直接使用变量:input = a;(没有&#39;)

2)在您的交换机案例中,您与&#39; 1&#39;,&#39; 2&#39; (类型为char)但input的类型为整数。试试这个:
case 1:case 2:(没有&#39;)

3)你不会在你的while循环中增加/减少i或x,它们永远不会停止。在循环中的某处尝试类似:i++x--的内容。

一些评论:
1)您可以使用没有大括号({})的开关案例:

int a = 0;
cin >> 1;
switch(a)
{
    case 1:
        break;
    case 2:
        int tmp = 0;
        cout<<"tmp: "<<tmp<<endl;
        break;
    default:
        break;
}

2)尽量避免全局变量,在大多数情况下,它们不是必需的,也是不好的做法。

3)您不需要变量a,您可以直接使用input,例如:

cout << "Enter Choice" << endl;
cin >> input;
switch (input)

4)最后但并非最不重要的是,我建议你阅读一些好的c ++书籍,这真的很值得。 (Good books