gpt4 book ai didi

c++ - 十六进制、二进制和八进制到十进制转换器不能正常工作 C++

转载 作者:行者123 更新时间:2023-11-28 05:19:52 25 4
gpt4 key购买 nike

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

long fromBin(long n)
{
long factor = 1;
long total = 0;

while (n != 0)
{
total += (n%10) * factor;
n /= 10;
factor *= 2;
}

return total;
}

int main() {
int a,b;
while (true) {
cin>>a;
if(a==2){
cin>>b;
cout<<fromBin(b)<<endl;
}
if(a==16){
cin >> hex >> b;
cout << b << endl;
}
if(a==8){
cin>>b;
cout<<oct<<b<<endl;
}
}
}

所以我的任务非常简单,但由于某种原因它不起作用。我必须在输入中输入 2 个数字。第一个显示我希望将数字 (16,2,8) 转换为十进制的基数第二个数字是数字。我在任务中的例子是:2 1111;16 F;8 1 ;答案应该是 15,15,1 。你也会认为这一定是一个无限循环,因为我的老师如何检查他的例子,他希望我们是无限循环。我得到了正确的答案,但只有我输入一次数字,第二个时间出了问题,我不明白是什么。例如:当我输入 16 f 时,我得到 15,但是当我尝试再次输入时,没有输出,当我尝试输入 2 1111 时,我得到65 没有明显的原因。另一个例子是当我输入 8 1 并且我得到 1(这是正确答案)然后我输入 2 1111 并得到 17。再次错误。无论我做什么我都不能在第 16 行中输入 2 f,第二个没有给我答案,你能帮帮我吗?

最佳答案

你用 hexoct 改变了 cincout 的状态,但是你没有完成后将它们放回去,因此在下一次传递时,它会做错事。此外,您没有任何代码可以在出现任何类型的错误时退出,因此当任何人试图退出时您的代码都会出错。

这里是固定的:

int main() {
int a,b;
while (!cin.fail()) // stop after an error
{
cin>>a;
if(a==2){
cin>>b;
cout<<fromBin(b)<<endl;
}
if(a==16){
cin >> hex >> b;
cin >> dec; // put it back the way we found it
cout << b << endl;
}
if(a==8){
cin>>b;
cout<<oct<<b<<endl;
cout<<dec; // put it back the way we found it
}
}
}

关于c++ - 十六进制、二进制和八进制到十进制转换器不能正常工作 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740032/

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