c++ - 这段代码是什么?为什么它有效?C++
问题描述
除了最后一行,我几乎知道这段代码中的所有内容。cout之后他在做什么?它叫什么?我针对同一问题的代码几乎是原来的三倍。而且我看到这个后真的很震惊。我是 C++ 新手,这是我第一次看到这样的东西。我什至不知道你可以像他在他的代码中那样使用括号。如果您回答菜鸟友好,那就太好了。谢谢
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
string c[]={"","one","two","three","four","five","six","seven","eight","nine"};
cin>>a>>b;
for(int i=a;i<=b;i++)
cout<<((i<=9)?c[i]:((i%2==0)?"even":"odd"))<<endl;
}
现在我的代码
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
// Complete the code.
int a;
int b;
cin >> a >> b;
for ( int n = a; n <= b; n++) {
if ( n >= 1 && n <= 9 ) {
string num;
switch(n) {
case 1:
num = "one";
break;
case 2:
num = "two";
break;
case 3:
num = "three";
break;
case 4:
num = "four";
break;
case 5:
num = "five";
break;
case 6:
num = "six";
break;
case 7:
num = "seven";
break;
case 8:
num = "eight";
break;
case 9:
num = "nine";
break;
}
cout << num << "\n" ;
} else if (n > 9 && n % 2 == 0) {
cout << "even \n" ;
} else {
cout << "odd \n" ; }
}
return 0;
}
解决方案
通过分解原始代码可以使其更易于理解。首先包括:
#include <string>
#include <iostream>
然后定义数字常量:
const std::string number[] ={"zero","one","two","three","four","five","six","seven","eight","nine"};
然后定义一个函数来完成那个丑陋的嵌套三元组所做的事情:
std::string nameOf(int v) {
if (v < 10) {
return number[v];
}
if (v % 2 == 0) {
return "even";
}
return "odd";
}
那么最终的代码其实很简单:
int main()
{
int a,b;
std::cin >> a >> b;
for(int i=a; i<=b; ++i) {
std::cout << nameOf(i) << std::endl;
}
return 0;
}
三元 ( X ? Y : Z
) 测试 expressionX
的计算结果是否为真值,如果是,则计算并返回 expression Y
。如果不是,Z
则计算并返回表达式。
if
这与没有返回值的常规不同,但在其他方面工作方式相同。
从可读性的角度来看,您希望将三元运算符的使用降至最低,它们会变得非常混乱。真的不需要使用嵌套的三元组。
推荐阅读
- python - PyPI 包的 PATH 问题,似乎找不到解决方案
- c# - 由于输出中的 StackOverflowException,以下代码抛出 Process is terminating。为什么?
- ruby-on-rails - Rails cancancan 未初始化常量 Ability::Dashboard 你的意思是?仪表板助手
- java - 仅将子类用于语义目的?
- c - C语言中的\a有什么用?
- c++ - 没有代码和一个定义规则的对象
- java - 在java中切换到while循环的第一行
- android - 在 Canny Edge 中使用 OpenCV 处理后,如何仅提取水平线或垂直线?
- javascript - 使用不同的 nodejs 参数进行搜索
- java - 停止片段的函数和调用并重置内部变量