#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.Again wrong.Whatever i do I not the two in a row 16 f,第二个没有给我答案。你能帮助我吗?
答案 0 :(得分:1)
您可以使用cin
和cout
更改hex
和oct
的状态,但是在完成后您不会将其设置回来,所以在下一遍,它做错了。此外,您没有任何代码可以退出任何类型的错误,所以当有人试图退出时,您的代码就会疯狂。
这里修好了:
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
}
}
}