实际上,我不是从哪里开始的。当我在课堂上进行测验时,我必须弄清楚当用户输入一些年龄时,我会遇到这个问题,结果将显示该数字是旧的,更年轻还是婴儿。我已经知道了,这种情况不适用于“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;
}
答案 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是不可移植的代码。
总是为工作选择正确的工具:你不会把衣服放在洗碗机里吗?
答案 1 :(得分:0)
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.
}
}
然而,你可以看到它会是多么可怕。