为什么我的程序表现得很奇怪

时间:2012-03-25 10:32:31

标签: c++

我刚刚开始研究通过网络发送文本的小型程序(TON)我还没有开始,但是当我编译时,当我的名字中有空格时会发生这种情况

Username: Knight Hawk3
LAN (1) or Net (0):
(Here it wont let me enter data)
Process returned 1 (0x1)   execution time : 3.670 s
Press any key to continue.

这是正常(应该)发生的事情

Username: Knight
LAN (1) or Net (0):
1

Process returned 1 (0x1)   execution time : 2.134 s
Press any key to continue.

这是我的来源

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include <SFML/Window.hpp>
#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
#include <iostream>
#include <string>

using namespace std;

bool firstrun = true;

int main()  {

    if (firstrun) {
        cout << "Username: ";
        string name = "";
        cin >> name;
        while (name == "") {
            cout << "Invalid Enter a new name: ";
            cin >> name;
            cout << "\n";
        }
    }
    cout << "LAN (1) or Net (0): ";
    int type;
    cout << "\n";
    cin >> type;
    while (type < 0) {
            cout << "Invalid LAN (1) or Net (0): ";
            cin >> type;
    }

    return true;
}

我正在运行WIN7,使用Code :: Blocks

为什么这会发生空间?

1 个答案:

答案 0 :(得分:1)

std::cin读取到第一个空格,但将其余部分保留在缓冲区中,这将用于以下std::cin

如果您要阅读第一个'\n'(点击输入),则必须将std::cin替换为

std::getline(std::cin, name);