更改if范围内变量的类型
Change type of a variable inside an if scope
#include <iostream>
int main(){
for (int i = 1; i <=5; i++){
if (i == 3)
char i[3] = "abc";
std::cout << i << "n";
}
}
输出:
1
2
3
4
5
因此,问题是char i[3]
仅在IF内部范围内范围范围内,如果我尝试在if句子中 cout
它会像预期的那样打印 "abc"
,但是在句子之外,如果句子不起作用,我可以称其为不粘。因此,我该如何声明它,以便它在if句子之外工作,而我不想在if句子中添加 cout
,而我不想在for循环中更改 cout
,因为在我的实际程序上,我正在打印桌子。
更新:这是我的实际代码:
#include <iostream>
#include <iomanip>
#include <cmath>
#define pi 3.14159265359
double d2r(int deg) {
double rad = (pi * deg) / 180;
return rad;
}
int main() {
int sw = 2;
cout << "Deg" << "t"
<< "Sin" << "t"
<< "Cos" << "t"
<< "Tan" << "t"
<< "n";
for (int deg = 2; deg <= 90; deg += 2) {
double A = sin(d2r(deg));
double B = cos(d2r(deg));
double C = tan(d2r(deg));
if (abs(B) < 0.00009)
B = 0;
if (abs(C) > 100)
char C[4] = "Inf";
cout << setprecision(3) << fixed
<< deg << setw(sw) << "t"
<< A << setw(sw) << "t"
<< B << setw(sw) << "t"
<< C << setw(0) << "n";
}
}
您无法像尝试一样更改C
的类型。您需要针对不同数据类型的单独的cout <<
语句,例如:
cout << setprecision(3) << fixed
<< deg << setw(sw) << "t"
<< A << setw(sw) << "t"
<< B << setw(sw) << "t";
if (abs(C) > 100)
cout << "Inf";
else
cout << C;
/* alternatively:
(abs(C) > 100) ? (cout << "Inf") : (cout << C);
*/
cout << setw(0) << "n";
另外,根据所需的任何条件格式化 std::string
,然后输出该字符串,例如:
std::ostringstream oss;
if (abs(C) > 100)
oss << "Inf";
else
oss << setprecision(3) << fixed << C;
/* alternatively:
(abs(C) > 100) ? (oss << "Inf") : (oss << setprecision(3) << fixed << C);
*/
cout << setprecision(3) << fixed
<< deg << setw(sw) << "t"
<< A << setw(sw) << "t"
<< B << setw(sw) << "t"
<< oss.str() << setw(0) << "n";
您可以写自己的I/O操纵器,例如:
#include <iostream>
#include <iomanip>
#include <cmath>
#define pi 3.14159265359
double d2r(int deg) {
double rad = (pi * deg) / 180;
return rad;
}
struct inf_if_greater_magnitude
{
inf_if_greater_magnitude(double val, double limit) : val(val), limit(limit) {}
friend std::ostream& operator<<(std::ostream&os, inf_if_greater_magnitude const& iig)
{
if (std::isinf(iig.val) or std::isnan(iig.val) or (std::abs(iig.val) > iig.limit))
return os << "Inf";
else
return os << iig.val;
}
double val;
double limit;
};
int main() {
using namespace std;
int sw = 2;
cout << "Deg" << "t"
<< "Sin" << "t"
<< "Cos" << "t"
<< "Tan" << "t"
<< "n";
for (int deg = 2; deg <= 90; deg += 2) {
double A = sin(d2r(deg));
double B = cos(d2r(deg));
double C = tan(d2r(deg));
if (abs(B) < 0.00009)
B = 0;
cout << setprecision(3) << fixed
<< deg << setw(sw) << "t"
<< A << setw(sw) << "t"
<< B << setw(sw) << "t"
<< inf_if_greater_magnitude(C, 100) << "n";
}
}
预期结果:
...
84 0.995 0.105 9.514
86 0.998 0.070 14.301
88 0.999 0.035 28.636
90 1.000 0.000 Inf
http://coliru.stacked-crooked.com/a/0da21c8ef5579f95
进一步的重构可以给您类似的东西:
#include <iostream>
#include <iomanip>
#include <cmath>
#define pi 3.14159265359
double d2r(int deg) {
double rad = (pi * deg) / 180;
return rad;
}
struct output_tan
{
output_tan(double val) : val(val) {}
friend std::ostream& operator<<(std::ostream&os, output_tan const& iig)
{
if (std::isinf(iig.val)
or std::isnan(iig.val)
or (std::abs(iig.val) > 100))
return os << "Inf";
else
return os << iig.val;
}
double val;
};
struct output_cos
{
output_cos(double val) : val(val) {}
friend std::ostream& operator<<(std::ostream&os, output_cos const& iig)
{
auto v = iig.val;
if (v < 0.00009) v = 0;
return os << v;
}
double val;
};
int main() {
using namespace std;
int sw = 2;
cout << "Deg" << "t"
<< "Sin" << "t"
<< "Cos" << "t"
<< "Tan" << "t"
<< "n";
for (int deg = 2; deg <= 90; deg += 2) {
cout << setprecision(3) << fixed
<< deg << setw(sw) << "t"
<< sin(d2r(deg)) << setw(sw) << "t"
<< output_cos(cos(d2r(deg))) << setw(sw) << "t"
<< output_tan(tan(d2r(deg))) << "n";
}
}
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- Eclipse CDT 打开声明的自动类型变量
- 如何计算长长类型变量中的位数
- 将自动类型变量初始化为零.这种类型安全吗?