getline不会在switch和cin中工作,不能正确获取数据?有人可以帮忙吗?

Rob*_*Rob 3 c++ dev-c++

嘿伙计们,我正在为我的工作做一个项目,但我似乎无法弄清楚这一点.

我需要接受制造模型和特定产品适合的汽车年限.该程序将编写一个包含文本的文件,该文件将成为我需要的html大纲,并将关键信息插入正确的位置,以便快速将产品添加到我们的网页中.当我使用switch语句或if语句来分隔产品的类别时,输入会搞砸,并且不允许我回答其中一个问题.我不能只使用cin,因为我需要采取看起来像"2008 - 2009 - 2010 - 2011"的日期

这是我迄今为止所拥有的!这个是常规的cin,我试过getline你可以很快我昨天开始我很新,所以原谅我,如果这是一个简单的解决方案,但我找不到任何东西.

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

void proinfo();

int main()
{
    //Sytem Information
    system("TITLE This is a Beta of My Product Information Template Version 0.0.2");

    //I'm using this as a welcome screen to inform users of new improvements on patches and other pertinent information to the users
    cout << "Welcome To My Product Information Template Maker!!! \n It Is Still In Development" << endl;
    cout << "\n\nworking features are:" << endl << "\t-None\n" << endl;
    system("PAUSE");
    system("CLS");
    proinfo();
}

void proinfo()
{
    //Declare Variables here
    int loop(1), protype;
    char make[256], model[256], year[256];
    string getinput;

    while(loop==1)
    {
        //This is the first menu the user sees where they have to choose what type 
        //of products users will be adding
        system("CLS");
        cout << "Welcome to My Product Information Template Version 0.0.0" << endl;

        cout << "Please select the number of the product" << endl;
        cout << "type you will be ading!\n" << endl;

        cout << "1.Fe - Fe2 Moldings" << endl;
        cout << "2.CF - CF2 Moldings" << endl;

        cout << "What would you like to do? ";

        cin >> protype;

        if(protype==1)
        {
            //FE - FE2 Molding
            system("cls");

            cout << "You have selected" << endl;
            cout << "Fe - Fe2 Moldings\n" << endl;

            cout << "Please Enter the Make of the molding" << endl;
            cin >> make;

            cout << "Please Enter the Model of the molding" << endl;
            cin >> model;

            cout << "Please Enter the Years this molding fits" << endl;
            cin >> year;

            cout << "You have just created a template for a(n)" << year << " " << make << " " << model << endl;
            cout << "Check My Documents For a file called Fe-Fe2template.txt" << endl;

            //Asks to quit or restart
            cout << "Would you like to make another tempalte?" << endl;

            cin >> getinput;

            if(getinput=="yes")
            {
                cout << "Great, Lets keep working!" << endl;
                //End of If statement
            }

            system("PAUSE");
        }

        if(protype==2)  
        {
            //CF - CF2 Molding
            system("cls");

            //Asks to quit or restart
            cout << "Would you like to make another tempalte?" << endl;

            cin >> getinput;

            if(getinput=="yes")
            {
                cout << "Great, Lets keep working!" << endl;
                //End of If statement                   
            }

            system("PAUSE");

            //End of Protype Switch Statement               
        }

        //End of while loop              
    }
    //End of Proinfo()    
}
Run Code Online (Sandbox Code Playgroud)

Duc*_*uck 5

将年份[256]更改为字符串年份;

改变cin >> year; getline(cin,year);

添加行cin.ignore(); 在getline之前.

你的主要问题是流运算符>>在流中留下换行符,所以当你尝试使用getline时它会读取一个空行.ignore()将咀嚼换行符,让你读取你期望的字符串.

所以这应该让你顺利.

cin.ignore();
cout << "Please Enter the Years this molding fits" << endl;
getline(cin, year);
Run Code Online (Sandbox Code Playgroud)

你还有其他一些小问题,但你会发现它们.最糟糕的是忘记终止循环.

if(getinput=="yes")
{
    cout << "Great, Lets keep working!" << endl;
   //End of If statement
}
else
{
    loop = 0;
    continue;
}
Run Code Online (Sandbox Code Playgroud)