C/C++混合读入cin与scanf问题-二、cin的应用方式

时间:2025-02-13 08:37:24

1、初级

基本输入cin (空格 / Tab / 换行分隔)

int a;
double b;
string s;

cin >> a >> b >> s;  // 依次读取整型、浮点型、字符串
  • 特点:自动跳过空白符(空格、制表符、换行)
  • 注意:无法读取含空格的字符串(会在空格处截断)

读取整行getline (含空格)

string line; // 因为要读取一整行,固需用 string
getline(cin, line);  // 读取整行(包括空格) !不会在结尾处留下/n
  • 典型问题:混合使用>> 和 getline 时,需先清除缓冲区:
int num;
string text; 

cin >> num;
cin.ignore();  // 清除缓冲区的换行符
getline(cin, text);

2、中级

错误处理与验证

int age;
while (true) {
    cout << "Enter age: ";
    if (cin >> age) {  // 检查输入是否合法
        break;
    } else {
        cin.clear();  // 清除错误状态
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 清空缓冲区
        cout << "Invalid input!" << endl;
    }
}
  • 关键方法
    • cin.clear():清除错误标志(如输入非数字时触发的 failbit)
    • cin.ignore():清空缓冲区中的无效内容

按特定字符数量读取

string part1, part2;
cin >> part1;                  // 读取到第一个空格
cin.ignore(5);           // 在读5个字符
getline(cin, part2, ',');      // 读取直到逗号

读取单个字符

char ch;
cin.get(ch);       // 读取单个字符(包括空格/换行)
// 或
ch = cin.get();    // 函数返回值形式