切换到C ++会跳过所有情况并直接进行

时间:2016-04-21 18:06:14

标签: c++ switch-statement case default

我是这个网站的新手,但现在已经开了大约一个学期的编程课。我刚才有一个问题,为什么我的程序正在跳过所有情况,进入默认状态,并立即关闭而不停止或做任何事情。这可能只是一件小事,但我一直坐在这里,看不到它。这是代码。谢谢你的帮助:

//Name Game
#include <iostream>  
#include <fstream>  
#include <stdlib.h> 
#include <math.h>  
#include <iomanip>  
using namespace std; 
int main(void)
{
    char name, zzz;
    cout << "Hello, and welcome to the start of a fantastic new adventure. \nI'm your guide for the day: Sebastian.  \nMay I ask what your name is?\n";
    cin >> name;
    switch (name)
    {
    case 'alex':
    case 'Alex':
        cout << "What an absolutely beautiful name. It sends chills down my spine just thinking about it. \nYou're one lucky girl.";
        cout << "\nI've heard from my friend that you are as beautiful as your name suggests.";
        break;
    case 'Ryan':
    case 'ryan':
        cout << "Please stop using this project.  What are you even doing here?";
        break;
    default:
        cout << "That's a nice name.  You should keep it for as long as you can.";
        cin >> zzz;
        return (0);
    }
    return 0;
}

3 个答案:

答案 0 :(得分:6)

char只是一个字符,而不是整个字符。

当您阅读char时,它将是aA,,但绝不会Alex

您必须为此任务使用字符串,这些字符串使用"double"引号而不是'single'引号。

答案 1 :(得分:0)

由于switch语句中的情况使用单引号括起多个字符,因此编译时有点意外。单引号通常只包含一个字符,用于表示您将使用双引号的多个字符(&#39;字符串&#39;)。

name变量被声明为char,只能容纳一个字符 - 我认为这就是为什么它始终选择默认情况。

我建议您阅读c ++处理字符串以完成您尝试做的事情。

答案 2 :(得分:0)

你的问题是因为你误解了char和string之间的变量类型,其中string是char(group)的char。

String name1 = "Alex";
cout<<name1;

它将打印 Alex (注意双引号),而

char name2 = 'Alex';
cout<<name2;

将打印 A ,因为变量name2仅适用于一个字符

因为你的case条件是多个char而你的switch变量只有一个字符,所以switch-case语句变为默认值。

替代方法是使用字符串变量并将switch-case语句更改为if-else语句,因为switch case cant句柄字符串变量(不创建指针或散列)