Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;getline函数连续循环_C++ - Fatal编程技术网

C++ C++;getline函数连续循环

C++ C++;getline函数连续循环,c++,C++,我试图在下面的代码中使用getline函数,但是它只是进入了一个不确定的循环。如果我输入1,它将跳转到循环的另一个迭代,并再次询问我的菜单选项,而不是询问我的名字 有人知道我哪里出错了吗 #include <iostream> #include <string> #include <ncurses.h> using namespace std; // DECLARE void menu(); void menu_act_on_choice(); void

我试图在下面的代码中使用getline函数,但是它只是进入了一个不确定的循环。如果我输入1,它将跳转到循环的另一个迭代,并再次询问我的菜单选项,而不是询问我的名字

有人知道我哪里出错了吗

#include <iostream>
#include <string>
#include <ncurses.h>

using namespace std;
// DECLARE

void menu();
void menu_act_on_choice();
void string_function();


// CODE

void menu_act_on_choice(int choice_in) {
    switch (choice_in) {
        case 1:
            string_function();
            break;
            
        default:
            break;
    }
}

void string_function() {
    string user;
    cout << "Enter your first and last: ";
    getline(cin, user);
    cout << user << endl;
}


void menu() {
    int choice = 0;
    do {
    cout << "1. String functions" << endl;
    cout << "2. Array functions" << endl;
    cout << "3. Exit" << endl;
    cout << "Enter choice: ";
    cin >> choice;
    menu_act_on_choice(choice);
    } while(choice != 3);
    
}

//EXECUTE
int main() {
    menu();
}
#包括
#包括
#包括
使用名称空间std;
//申报
无效菜单();
无效菜单操作选项();
空字符串_函数();
//代码
无效菜单按选项操作(整数选项按){
开关(选择_in){
案例1:
字符串_函数();
打破
违约:
打破
}
}
空字符串_函数(){
字符串用户;

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

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

当您输入由

cin >> choice;
你用回车键结束了,对吗

该回车键将作为换行符添加到输入缓冲区。但是,
cin>>choice
将不会读取它,相反,
getline
调用会将其读取为空行

简单的解决方案是在获得菜单选项后,在换行之前(包括!)输入所有内容

cin >> choice;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cin>>选择;
cin.ignore(std::numeric_limits::max(),'\n');

当您输入由读取的菜单选项时

cin >> choice;
你用回车键结束了,对吗

该回车键将作为换行符添加到输入缓冲区。但是,
cin>>choice
将不会读取它,相反,
getline
调用会将其读取为空行

简单的解决方案是在获得菜单选项后,在换行之前(包括!)输入所有内容

cin >> choice;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cin>>选择;
cin.ignore(std::numeric_limits::max(),'\n');

答案正确识别了代码中的第一个问题。但是,这不是唯一的问题:尝试在菜单提示下输入一个单词,而不是一个数字,然后观察发生了什么。答案正确识别了代码中的第一个问题。然而,这不是唯一的问题:尝试在菜单提示下输入一个单词,而不是一个数字,然后看看会发生什么。很好用。谢谢。很好用。谢谢。