每当我使用cin并在字符串中使用空格时,为什么它只是跳过整个事情呢?

时间:2014-07-06 16:53:03

标签: c++ cin

我制作了一个应该输入打印的程序。然后运行一个简单的附加功能,但是当我在输入中使用空格时,它会跳过添加。我不知道问题是什么。

这是课堂内容

#include <iostream>
#include <string>
using namespace std;
class Cheese {
    private:
        string name;
    public:
        void setName(string x){
            cin >> x;
            x = name;
        }
        string getName(){
            return name;
        }
        void print(){
            cout << name << endl;
        }

};

这是主要的东西

int main()
{
    string h;
    Cheese hole;
    hole.setName(h);
    hole.getName();
    hole.print();

这部分被忽略而不让我输入

    int x = 5;
    int y = 16;
    cout << x+y;
    num(x);
    int a;
    int b;
    int c;
    cout << "Type in a number and press enter.";
    cin >> a;
    cout << "Repeat.";
    cin >> b;
    c = a+b;
    cout << c << endl;

    if(c <= 21){
        cout << "Good job!";
    }
    else {
        cout << "You fail!";
    }
    return 0;   
}

2 个答案:

答案 0 :(得分:0)

我建议你把责任分开一点点。 Cheese类的setName函数应该只接受一个字符串并将实例的成员变量设置为给定的参数。

然后,您的程序可以从标准输入读取并填充main中的字符串,并将该字符串传递给setName

更具体:

class Cheese {
    private:
        string name;
    public:
        void setName(const string& x){
           // change this code to set the 'name' member variable
        }
        [...]    
};

主要成为:

int main()
{
    string h;
    Cheese hole;
    std::string input_name;
    cout << "Type a name and press enter.";
    cin >> input_name;  // Will read up to first whitespace character.
    hole.setName(input_name);
    hole.getName();  // this is a no-op: compiler may warn of unused return value
    hole.print();

通常,将标准输入作为类接口的一部分读取是一个坏主意,因为它使得将来很难重用该类(例如,使用从文件而不是从文件中获取输入的程序)人在控制台。)

答案 1 :(得分:0)

传递给cin输入流的输入会跳过任何空格,制表符空格或换行符。如果您想输入字符串,则可以使用cin.getline(string s)。白色空间传递到下一个等待的cin之后的输入,因为下一个cin接受整数并且它获得一个跳过它的字符串。因此,当输入带有空格的字符串时,程序会跳过剩余的部分。