提问人:Mohammed Ashraf 提问时间:10/7/2023 最后编辑:BoPMohammed Ashraf 更新时间:10/8/2023 访问量:53
使用 char 数据类型时 cin.getline() 有问题
having issue with cin.getline() when working with char data type
问:
如果我输入 ,为什么程序会跳过并完成?12345
arr2
cin.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`
答:
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
如果我输入 ,为什么程序会跳过并完成?
12345
arr2
cin.getline(arr3,6,'#')
该行表示这是指向 5 个字符数组的指针。该大小包括适当的 C 样式字符串所需的终止符。cin.getline(arr2,5,'#');
arr2
'\0'
所以它只能从输入中读取 4 个字符,然后添加终止符。当它在行尾之前发现超过 4 个字符时,即为输入错误。
因此,流会设置其 -state,并且在清除错误条件之前不会再读取任何内容。fail()
将跳过输入,因为流已处于错误状态。arr3
评论