gpt4 book ai didi

C++ switch语句奇数输出

转载 作者:行者123 更新时间:2023-11-30 01:14:30 25 4
gpt4 key购买 nike

我正在为 C++ 入门类(class)完成期末作业。到目前为止我编写的代码有效,但它产生了一些有趣的输出,我正在寻求澄清。这是我的代码:

(注意:是的,我知道使用 void main() 很糟糕,但我们在类里面使用 Visual Studio,这是教师的偏好。)

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

void conversion(int);

void main()
{
int decimal_number, answer;

cout << "Please enter a whole decimal number (e.g. 20): ";
cin >> decimal_number;

if (decimal_number == 0)
{
answer = 0;
cout << "The hexadecimal value of your number is: " << answer;
getchar();
getchar();
}
else if (decimal_number < 0)
{
cout << "INVALID ENTRY" ;
getchar();
getchar();
}
else if (decimal_number > 0)
{
conversion(decimal_number);
}

getchar();
getchar();

}

void conversion (int decimal_number)
{
int count = 0, remainder, reverse_order;
char hexadecimal_number[10] = { NULL };

while (decimal_number != 0)
{
remainder = decimal_number % 16;

switch (remainder)
{
case 0:
hexadecimal_number[count] = '0';
count++;
break;
case 1:
hexadecimal_number[count] = '1';
count++;
break;
case 2:
hexadecimal_number[count] = '2';
count++;
break;
case 3:
hexadecimal_number[count] = '3';
count++;
break;
case 4:
hexadecimal_number[count] = '4';
count++;
break;
case 5:
hexadecimal_number[count] = '5';
count++;
break;
case 6:
hexadecimal_number[count] = '6';
count++;
break;
case 7:
hexadecimal_number[count] = '7';
count++;
break;
case 8:
hexadecimal_number[count] = '8';
count++;
break;
case 9:
hexadecimal_number[count] = '9';
count++;
break;
case 10:
hexadecimal_number[count] = 'A';
count++;
break;
case 11:
hexadecimal_number[count] = 'B';
count++;
break;
case 12:
hexadecimal_number[count] = 'C';
count++;
break;
case 13:
hexadecimal_number[count] = 'D';
count++;
break;
case 14:
hexadecimal_number[count] = 'E';
count++;
break;
case 15:
hexadecimal_number[count] = 'F';
count++;
break;
default:
cout << decimal_number << "+++ " << hexadecimal_number;
cout << "INVALID ENTRY";
getchar();
getchar();
}

decimal_number = decimal_number / 16;

}

cout << "The hexadecimal value of your number is: ";

for (reverse_order = count -1; reverse_order >= 0; reverse_order--)
{
cout << hexadecimal_number[reverse_order];
}

getchar();
getchar();

}

所以,就像我说的:我的代码有效。我可以将任何数字作为十进制输入,并将其转换为等效的十六进制。但是,我发现我必须包含一个 IF在代码的 main 函数中声明,因为如果用户在 decimal_number 中输入任何 other 十进制数变量,程序会将一串十进制数字存储到decimal_number中,我不知道这些数字从何而来。它们似乎不是任何 ASCII 等价物。

...如果这些都没有任何意义,我很抱歉。只需输入 cout << decimal_numbercin >> decimal_number 行之后,然后运行代码,看看会出现什么奇怪的数字。我希望这能让事情变得更清楚。

无论如何,我的导师都被难住了,我也被难住了。我已经准备好导师会接受的上述解决方法,但为了我自己的理智,我只想弄清楚发生了什么。任何帮助或指示表示赞赏。干杯!

最佳答案

可以测试cin >> decimal_number的结果是否成功,比如

if(!(cin>>decimal_number))
throw std::runtime_error("Oops, not a decimal number!");

这有点太极端了,你也可以验证输入:

while(!(cin>>decimal_number))
{
std::cout << "Not decimal, input again ";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

如果您不执行这种验证,那么无论何时读取非十进制数,您都会使流处于无效状态,并且您认为正在读取的变量最终将未初始化。

关于C++ switch语句奇数输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com