处理';其他';在循环中键入情况 我的C++课有一个作业问题,问题是让用户输入一个波长,然后输出正确的辐射类型。strong>需要注意的是,波名的值比波长的值多。

处理';其他';在循环中键入情况 我的C++课有一个作业问题,问题是让用户输入一个波长,然后输出正确的辐射类型。strong>需要注意的是,波名的值比波长的值多。,c++,C++,我的解决方案如下所示: const double WAVE_LENGTH[] = { 1e-11, 1e-8, 4e-7, 7e-7, 1e-3, 1e-2 }; const char* WAVE_NAME[] = { "Gamma Rays", "X Rays", "Ultraviolet", "Visible Light", "Infrared", "Microwaves", "Radio Waves" }; double waveLength; std::cout << "

我的解决方案如下所示:

const double WAVE_LENGTH[] = { 1e-11, 1e-8, 4e-7, 7e-7, 1e-3, 1e-2 };
const char* WAVE_NAME[] = { "Gamma Rays", "X Rays", "Ultraviolet", "Visible Light", "Infrared", "Microwaves", "Radio Waves" };

double waveLength;

std::cout << "Enter a wavelength in decimal or scientific notation\nWavelength: ";
std::cin >> waveLength;

for (unsigned short i = 0U; i < 6U; ++i)
{
    if (waveLength < WAVE_LENGTH[i])
    {
        std::cout << "The type of radiation is " << WAVE_NAME[i] << std::endl;
        break;
    }
    if (i == 5U) // Last iteration
        std::cout << "The type of radiation is " << WAVE_NAME[i + 1] << std::endl;
}
const双波长[]={1e-11、1e-8、4e-7、7e-7、1e-3、1e-2};
const char*WAVE_NAME[]={“伽马射线”、“X射线”、“紫外线”、“可见光”、“红外线”、“微波”、“无线电波”};
双波长;
std::cout>波长;
用于(无符号短i=0U;i<6U;++i)
{
if(波长<波长[i])
{

std::cout我认为您可以将循环简化为:

unsigned short i;

for (i = 0U; i < 6U; ++i)
{
    if (waveLength < WAVE_LENGTH[i])
    {
        break;
    }
}
std::cout << "The type of radiation is " << WAVE_NAME[i] << std::endl;
无符号短i;
对于(i=0U;i<6U;++i)
{
if(波长<波长[i])
{
打破
}
}

std::cout我认为您可以将循环简化为:

unsigned short i;

for (i = 0U; i < 6U; ++i)
{
    if (waveLength < WAVE_LENGTH[i])
    {
        break;
    }
}
std::cout << "The type of radiation is " << WAVE_NAME[i] << std::endl;
无符号短i;
对于(i=0U;i<6U;++i)
{
if(波长<波长[i])
{
打破
}
}

std::cout在我看来,一个更简洁的设计是将正无穷大作为
波长的最后一个元素。这样,您的拐角处案例将不需要特殊处理:

#include <iostream>
#include <limits>

...

const double WAVE_LENGTH[] = { 1e-11, 1e-8, 4e-7, 7e-7, 1e-3, 1e-2,
                               std::numeric_limits<double>::infinity() };
const char* WAVE_NAME[] = { "Gamma Rays", "X Rays", "Ultraviolet", "Visible Light",
                            "Infrared", "Microwaves", "Radio Waves" };

double waveLength;

std::cout << "Enter a wavelength in decimal or scientific notation\nWavelength: ";
std::cin >> waveLength;

for (int i = 0; i < sizeof(WAVE_LENGTH) / sizeof(WAVE_LENGTH[0]); ++i)
{
    if (waveLength < WAVE_LENGTH[i])
    {
        std::cout << "The type of radiation is " << WAVE_NAME[i] << std::endl;
        break;
    }
}
#包括
#包括
...
常数双波长[]={1e-11、1e-8、4e-7、7e-7、1e-3、1e-2,
std::numeric_limits::infinity()};
const char*WAVE_NAME[]={“伽马射线”、“X射线”、“紫外线”、“可见光”,
“红外线”、“微波”、“无线电波”};
双波长;
std::cout>波长;
对于(int i=0;istd::cout在我看来,一个更简洁的设计是将正无穷大作为
波长的最后一个元素。这样,您的拐角处案例将不需要特殊处理:

#include <iostream>
#include <limits>

...

const double WAVE_LENGTH[] = { 1e-11, 1e-8, 4e-7, 7e-7, 1e-3, 1e-2,
                               std::numeric_limits<double>::infinity() };
const char* WAVE_NAME[] = { "Gamma Rays", "X Rays", "Ultraviolet", "Visible Light",
                            "Infrared", "Microwaves", "Radio Waves" };

double waveLength;

std::cout << "Enter a wavelength in decimal or scientific notation\nWavelength: ";
std::cin >> waveLength;

for (int i = 0; i < sizeof(WAVE_LENGTH) / sizeof(WAVE_LENGTH[0]); ++i)
{
    if (waveLength < WAVE_LENGTH[i])
    {
        std::cout << "The type of radiation is " << WAVE_NAME[i] << std::endl;
        break;
    }
}
#包括
#包括
...
常数双波长[]={1e-11、1e-8、4e-7、7e-7、1e-3、1e-2,
std::numeric_limits::infinity()};
const char*WAVE_NAME[]={“伽马射线”、“X射线”、“紫外线”、“可见光”,
“红外线”、“微波”、“无线电波”};
双波长;
std::cout>波长;
对于(int i=0;istd::cout您可以在相同的if中测试最后一次迭代。请注意,itn不再进行测试

for (unsigned short i = 0U; ; ++i)
{
    if (i == 6 || waveLength < WAVE_LENGTH[i])
    {
        std::cout << "The type of radiation is " << WAVE_NAME[i] << std::endl;
        break;
    }

}
for(无符号短i=0U;;++i)
{
if(i==6 | |波长<波长[i])
{

std::cout您可以在相同的if中测试最后一次迭代。请注意,itn不再进行测试

for (unsigned short i = 0U; ; ++i)
{
    if (i == 6 || waveLength < WAVE_LENGTH[i])
    {
        std::cout << "The type of radiation is " << WAVE_NAME[i] << std::endl;
        break;
    }

}
for(无符号短i=0U;;++i)
{
if(i==6 | |波长<波长[i])
{

std::cout这将始终执行外部
std::cout
。但他的原始代码可能不会。事实上,再看看原始循环-我想你会发现我的版本给出了相同的行为。你在声明的循环外部使用I。你打算将其移出循环吗?记录在案,有两个不错的解决方案选项,但我最喜欢这一行。这也意味着当输出在您身上更改时,您可以少更改一行…
unsigned short I
在循环结束时超出范围,需要在循环之前声明它。(@Nawaz:在什么情况下它不会显示?)我喜欢这一行。我知道有一种更干净的方法可以做到这一点。谢谢!(=这将始终执行外部
std::cout
。但他的原始代码可能不会执行。事实上,再看看原始循环-我想你会发现我的版本给出了相同的行为。你在声明的循环外部使用I。你打算将其移出循环吗?作为记录,有两个不错的解决方案,b但我最喜欢这一行。这也意味着当输出在您身上发生变化时,您可以少更改一行…
无符号短I
在循环结束时超出范围,需要在循环之前声明它。(@Nawaz:在什么情况下它不会显示?)我喜欢这一行。我知道有一种更干净的方法可以做到这一点。谢谢!(=好的,你有五个有界区间和两个无界区间。这必须以这样或那样的方式显示在循环中。好的,你有五个有界区间和两个无界区间。这必须以这样或那样的方式显示在循环中。无穷大的概念很有趣。这有点道理,因为我们在这种情况下处理无穷大,正如我们所说的你甚至不需要任何条件,因为循环总是在无穷大上断开。无穷大的概念很有趣。这有点道理,因为我们在这种情况下也在处理无穷大。你甚至不需要任何条件,因为循环总是在无穷大上断开。