2011-04-19 31 views
2

即时通讯编写程序将四位八进制数转换为十进制数。我必须使用字符来完成这个程序。 没有炭化线或字符串说我的讲师。有没有人不知道我能做到这一点?这里是我的代码:C++如果语句超过4位数

int main() { 

    char a = 0; 
    char b = 0; 
    char c = 0; 
    char d = 0; 

    cout << "Enter 4 digit octal number "; 
    cin >> a >> b >> c >> d; 
    if (a - '0' > 7 || b - '0' > 7 || c - '0' > 7 || d - '0' > 7 || !isdigit(a) 
     || !isdigit(b) || !isdigit(c) || !isdigit(d)) { 
    cout << "Bad data"; 
    } 
    else 
    cout << "Decimal form of that number: " << ((a - '0') * 512) + ((b - '0') 
     * 64) + ((c - '0') * 8) + (d - '0') << endl; 

    return 0; 
} 
+1

你的代码有什么问题?哪一部分不能按照你的预期工作?你期望什么? – 2011-04-19 11:49:06

+0

你已经完成了。你觉得不清楚/困惑是什么? – NPE 2011-04-19 11:49:54

+0

对不起,我应该更清楚。我必须让它说用户的“坏数据”以超过4个整数输入一个数字。 – 2011-04-19 11:57:05

回答

1

这为我工作,当我提供isdigit作为

bool isdigit(char digit) { 
    return digit >= '0' && digit <='9'; 
} 

,简化了第一次检查,以

if (!isdigit(a) || !isdigit(b) || !isdigit(c) || !isdigit(d)) { 
    cout << "Bad data"; 
} else ... 
+6

为了确保不输入“8”或“9”,需要“if”的第一部分,因为它们不是有效的八进制数字。 – Lindydancer 2011-04-19 11:56:11

+0

isdigit是C99的一部分,在4.3BSD之前已经提供了很长时间,所以很可能起源海报没有意识到它不是完全可移植的。 – Tommy 2011-04-19 12:04:07

+0

@Lindydancer D'oh! – 2011-04-19 12:09:46

1

您可以使用cin.peek()检查下一个未读阅读后的字符a,b,cd。如果它是八进制数字,则输入错误,否则(即使失败)一切正常。