栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 使用cin 和cin.get()输入字符或数字后导致cin.get(),cin.getline()无法输入

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 使用cin 和cin.get()输入字符或数字后导致cin.get(),cin.getline()无法输入

 使用cin>>和cin.get()输入字符或数字,紧接着使用cin.get()或cin.getline()等函数时表现出没有执行,直接跳过的现象。

日期:2022-07-07

cin 问题示例
#include 
#include 

using namespace std;

void test_cin()
{
    // ------------char------------
    char c = 'c';
    cout << "c = " << c << endl;
    
    // cin >> c;
    cin.get(c);
    cout << "c = " << c << endl;

    char *arr = new char[5];
    //1.
    cin.getline(arr, 5);    // 此处的表现为跳过
    cout << "//1 arr =  " << arr << endl;
    // replace
    // cin.get(); // cin.ignore();

    //2.
    cin.getline(arr, 5);    // 此处正常执行
    cout << "//2 arr =  " << arr << endl;

    delete []arr;
    arr = NULL;
    return ;
}

int main(int argc, char const *argv[])
{
    test_cin();
    return 0;
}

运行代码后,控制台先打印 c = c , 输入a后回车,控制台打印2行:
c = a
//1 arr =
随后输入gett并回车,控制台打印:
//2 arr = gett

可见//1 出的代码似乎是跳过了

原因

cin>> 输入,遇到空格,tab,回车,换行符会结束,有时需要输入空格,则需使用函数cin.get() 或者 cin.getline();这两个函数都可以读取一行直到遇到终止符结束,终止符默认为换行符,如果显式的给出了其他终止符,则可以读取换行,空白等字符;cin.get()会把终止符保留在缓冲区中,cin.getline()则是把终止符丢弃。

cin>> 会把输入完成后点击的换行符也会保留在缓冲区中。

如果不清空缓冲区,则下次输入时可能会发生错误。

解决

可使用cin.get()(没有参数)或 cin.getline 来清空缓冲区。

当cin.getline() 及 getline() 使用终止符时,换行符是可以包含在输入内的,而不会结束输入,此时终止符后面的换行符或者更多的字符不会被读取,而是被保留在缓冲区内,此时也需要清空缓冲区,避免影响下一次输入;需要注意的是,cin.get()只能读取一个字符,如果缓冲区内有多个字符则需要使用cin.getline()将缓冲区内的字符读到一个大容量的字符数组内来达到清空缓冲区的目的。

int main(int argc, char const *argv[])
{
    char arr[5];
    cin.getline(arr, 5, 'g');
    cout<<"arr: "<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号