2011-11-20 67 views
0

我通常是一名Java程序员,几乎完全使用textmate,但最近我开始使用C++。但是当我使用甚至最基本的程序并纳入关键字,并运行程序,我没有得到一个oppurtunity在运行时放入任何东西,有时它本身插入随机值!例如,如果我跑这在TextMate中:在textmate中使用cin和cout

#include <iostream> 

int stonetolb(int); 

int main() { 

    using namespace std; 
    int stone; 
    cout << "enter the weight in stone"; 
    cin >> stone; 
    int pounds = stonetolb(stone); 
    cout << stone << "stone = "; 
    cout << pounds <<" pounds."; 
    return 0; 
} 

int stonetolb(int sts) { 

     return 14 * sts; 
} 

就出来与输出:

在stone32767stone = 458738磅输入重量。

为什么会发生这种情况,我该如何阻止它?

+1

Ehm用户错误...你错过了新的行吗?我相信该程序正在完美地执行您的指示。究竟哪部分输出是随机的? – 2011-11-20 16:14:52

+0

我没有输入任何值,它插入了32767,我可以放入任何想要的值 –

回答

2

很可能,输入语句cin >> stone失败,并且stone有一个未定义的值。您需要使用if (cin >> stone) { ... } else { // input failure }来检查输入是否失败。至于为什么这样一个简单的程序会出现失败的行为,我不知道 - 你将不得不检查textmate文档。

+2

在OS X上测试上面的代码(我们知道OP使用的是因为他提到了Textmate),我可以证实这是到底发生了什么 - 未初始化,如果用户对初始提示输入了非数字答案,那么从数据流中读入失败,并且stone保持其初始值,则'stone'具有值32767。阻止这种情况发生的方法是在程序请求一个值时实际插入一个值(最好是在从流中读取时检查并处理错误条件) –