我编写了一个代码,用于在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循环等它工作正常但在这种情况下它不起作用。帮助我。
答案 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