使用 char 数据类型时 cin.getline() 有问题

having issue with cin.getline() when working with char data type

提问人:Mohammed Ashraf 提问时间:10/7/2023 最后编辑:BoPMohammed Ashraf 更新时间:10/8/2023 访问量:53

问:

如果我输入 ,为什么程序会跳过并完成?12345arr2cin.getline(arr3,6,'#')

#include <iostream>
#include <string>

using namespace std;

int main() {
    string text;
    char arr2[10];
    char arr3[6];
    cout << "enter value" <<endl;
    getline(cin,text);
    cin.getline(arr2,5,'#');
    cin.getline(arr3,6,'#');
    cout << "results : " << endl;
    cout << " arr1 is : " << text << endl;
    cout <<" arr2 is : " << arr2 << endl;
    cout <<" arr3 is : " << arr3 ;
    return 0 ;
}

执行示例:

enter value
mo
12345
results :
 arr1 is : mo
 arr2 is : 1234
 arr3 is :
Process finished with exit code 0`

C++ C++17 getline

评论

0赞 Vlad from Moscow 10/7/2023
你期待什么结果?
0赞 Vlad from Moscow 10/7/2023
哪里有arr1?

答:

0赞 0xAR33B 10/7/2023 #1

cin.getline() 中的最后一个参数表示输入结束,即分隔符。将这些行替换为要修复的代码。

cin.getline(arr1,10,'\n');
cin.getline(arr2,10,'\n');
cin.getline(arr3,6,'\n');

语法是cin.getline(your_array, max_characters, delimiter);

\n表示换行符(如果是此代码,则表示 ENTER 按)


不要忘记声明 arr1,因为它的声明在您的代码中丢失......


3赞 BoP 10/7/2023 #2

如果我输入 ,为什么程序会跳过并完成?12345arr2cin.getline(arr3,6,'#')

该行表示这是指向 5 个字符数组的指针。该大小包括适当的 C 样式字符串所需的终止符。cin.getline(arr2,5,'#');arr2'\0'

所以它只能从输入中读取 4 个字符,然后添加终止符。当它在行尾之前发现超过 4 个字符时,即为输入错误。

因此,流会设置其 -state,并且在清除错误条件之前不会再读取任何内容。fail()

将跳过输入,因为流已处于错误状态。arr3