检查你使用switch语句c ++评分

时间:2017-11-07 08:22:40

标签: c++

实际上,我不是从哪里开始的。当我在课堂上进行测验时,我必须弄清楚当用户输入一些年龄时,我会遇到这个问题,结果将显示该数字是旧的,更年轻还是婴儿。我已经知道了,这种情况不适用于“switch语句”,很难编写“案例0:......案例100:”。当我搜索关于这个问题,但只使用“if / else语句”。如果有任何与“switch语句”一起使用的示例代码或只是说继续使用“if / else语句”,请引导我。

亲切地问候

这里的切换语句很糟糕。

#include<iostream>
#include<iomanip>
using namespace std;

int main() { 
int age;

cout << "Enter your age: " << endl;
cin >> age;

switch (age) {

case 0:
        cout << "Young" << endl;
    break;

case 20:
        cout << "Middle" << endl;
    break;

case 70:
        cout << "Prime" << endl;
    break;

default:
    cout << "Invalid age" << endl;
}
cout << "Your age is " << age << endl;

 system("pause");
 return 0;
 }

这里if / else语句并且运行良好

#include<iostream>
#include<iomanip>
using namespace std;

int main() { 
int age;

cout << "Enter your age: " << endl;
cin >> age;

if (age >= 50) {
    cout << "Prime" << endl;//
}
else if (age >= 20) {
    cout << "Middle" << endl;//
}
else if (age >= 10) {
    cout << "Young" << endl;//
}

else {
    cout << "Baby" << endl;//

}

 system("pause");
 return 0;
 }

2 个答案:

答案 0 :(得分:1)

如果将switch作为if块编写,为什么要使用switch来更好地工作?

有些编译器允许基于范围的 case 20...69:作为语言扩展(使用类似[XmlException: Root element is missing.] System.Xml.XmlTextReaderImpl.Throw(Exception e) +88 System.Xml.XmlTextReaderImpl.ParseDocumentContent() +1611 System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace) +185 System.Xml.XmlDocument.Load(XmlReader reader) +134 System.Xml.XmlDocument.Load(String filename) +146 Sitecore.Xml.XmlUtil.LoadXmlFile(String filename) +144 ..() +19 ...ctor(String fileName) +432 Sitecore.Nexus.Licensing.NexusLicenseApi.() +284 Sitecore.Nexus.Licensing.NexusLicenseApi.GetModuleCount(String name) +138 Sitecore.Nexus.Licensing.NexusLicenseApi.HasModule(String name) +131 Sitecore.Xdb.Configuration.XdbSettings.get_HasValidLicense() +22 Sitecore.Xdb.Configuration.XdbSettings.get_Enabled() +9 Sitecore.Analytics.Pipelines.Initialize.ShowXdbInfo.Process(PipelineArgs args) +216 (Object , Object[] ) +71 Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +479 Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain) +22 Sitecore.Nexus.Web.HttpModule.Application_Start() +255 Sitecore.Nexus.Web.HttpModule.Init(HttpApplication app) +673 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +583 System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +169 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +396 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +333 [HttpException (0x80004005): Root element is missing.] System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +525 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +124 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +700 的符号,但在我看来这是毫无意义的,因为所有你最终with是不可移植的代码。

总是为工作选择正确的工具:你不会把衣服放在洗碗机里吗?

参考:https://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html

答案 1 :(得分:0)

参考the c++ documentation

  

switch语句的语法有点奇怪。其目的是检查许多可能的常量表达式中的值。它类似于连接if-else语句,但仅限于常量表达式。

您不能对表达式使用通配符语法。在我发现的类似代码中,首先评估用户输入并为其分配从a到d的字母。在切换案例中,该字母给出了特定的输入。

你可以像这样堆叠开关条件:

#include<iostream>
using namespace std;

void Main()
{
    int age; // User-input
    switch (age)
    {
        case 0:
        default:
            cout << "Invalid age." << endl;
            break;
        case 1:          
        case 2:
        case 3:
        // Continue until last age of "young" is reached.  
    } 
}

然而,你可以看到它会是多么可怕。