使用函数的C ++字符串输入

时间:2012-10-15 08:11:19

标签: c++ string input logic

我编写了一个代码,用于在C ++中从用户处获取字符串。这是代码

#include<iostream>
#include<string>
using namespace std;
string input;
void enterstring()
{
    cout<<"\nEnter input: ";
    getline(cin,input);

}
void displaystring()
{
    cout<<"\nyour string is "<<input<<endl;

}
{
    int main()
{
int choice=0;
while(choice!=3)
{

    cout<<"Enter choice: "<<;
          cin>>choice;
    switch(choice)
    {
        case 1: enterstring();
        break;
        case 2: displaystring();
        break;
        case 3: cout<<"\nQuit";
        break;
        default: cout<<"\ninvalid choice try again";
        break;


    }
    return 0;
}

输出上面的代码:

Enter choice: 1
Enter input: 
Enter choice:

跳过输入部分我不知道为什么问题出在哪里。逻辑错误,语法问题。当我调用函数而不使用while循环等它工作正常但在这种情况下它不起作用。帮助我。

2 个答案:

答案 0 :(得分:3)

问题是您正在将选项读作int,但输入是带换行符的字符串。

在您的示例中,输入不是1是“1 \ n” 1选择为int,'\ n'在缓冲区中。当你调用从缓冲区读取的函数的getline函数时,找到换行符并返回一个空字符串。 为了避免这种情况,你应该把选择读作字符串,而不是使用atoi来强制转换为int。

编辑:

你是对的。它仍然无法正常工作。但是这里有一个有效的版本。

#include <iostream>
#include <string>

using namespace std;
string input;
void enterstring(){
    cout<<"\nEnter input: ";
    cin.ignore();
    getline(cin,input);
}

void displaystring(){
    cout<<"\nyour string is "<<input<<endl;
}

int main(){
    int choice=0;
    while(choice!=3){
        cout<<"Enter choice: ";
        cin>>choice;
        switch(choice){
            case 1: enterstring();
            break;
            case 2: displaystring();
            break;
            case 3: cout<<"\nQuit";
            break;
            default: cout<<"\ninvalid choice try again";
            break;
        }
    }
    return 0;
}

答案 1 :(得分:1)

您发布的代码无效:"之后您遗漏了Enter choice :

除此之外,你的代码似乎在ideone中工作(我添加了一些缩进并纠正了一些小错误。我还添加了一个main函数)。你可以在这里看到它:http://ideone.com/ozvB1