3

我已经编写了一个代码,用于在 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 循环等的情况下调用函数时,它工作正常,但在这种情况下它不起作用。帮我。

4

2 回答 2

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;
}
于 2012-10-15T08:15:10.280 回答
1

您发布的代码无效:您缺少"after Enter choice :

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

于 2012-10-15T08:20:35.090 回答