You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么使用cin.get()的C++求和程序可正确识别多位整数?

问题解答

cin.get(char) 每次确实只会读取1个字符,不会一次性读取多个数字字符。这段代码能正确读取多位整数,核心是依靠 cin >> 整数变量 的特性,和 cin.get、cin.putback 本身的读取长度无关。


代码运行的完整流程

我们以输入 Hello please add 12 and 14 ! 为例,一步步看执行过程:

  1. 第一个循环用来定位第一个整数的开头:
    • 循环用 cin.get(ch) 逐个读取字符:H、e、l、l、o、空格、p...一直到读到字符1
    • 发现1是数字,就用 cin.putback(ch) 把这个1放回输入流,此时输入流的读取指针又回到了1的前面
    • 接下来执行 cin >> m:cin 读取int类型的时候,会自动从当前指针位置开始,连续读取所有连续的数字字符,直到遇到非数字字符为止。所以这里会依次读入1和2,自动拼接成整数12赋值给m,读到后面的空格时停止读取,第一个循环结束。
  2. 第二个循环用来定位第二个整数的开头:
    • 继续从刚才停止的位置(12后面的空格)开始,用cin.get(ch)逐个读后面的a、n、d、空格,直到读到第二个整数开头的1
    • 同样把1放回输入流,用cin >> n连续读取1和4,得到整数14赋值给n
  3. 最后忽略当前行剩余的所有字符,输出计算结果。

补充说明

cin.get 和 cin.putback 在这里的作用仅仅是定位到第一个数字字符的位置,把第一个数字还回流里,让后面的cin>>能正常从第一位数字开始读整个整数,真正完成多位整数读取的是cin>>的自带逻辑。


参考代码

#include <iostream>
using namespace std;

int main(){
    int m,n;
    char ch;
    while(cin.get(ch)){
        if(isdigit(ch))
        {
            cin.putback(ch);
            cin>>m;
            break;
        }
    }
    //cin.putback() restores the last character 

    //read by cin.get() back to the input stream
    while(cin.get(ch)){
        if(isdigit(ch))
        {
            cin.putback(ch);
            cin>>n;
            break;
        }
    }
    cin.ignore(80,'\n');
    cout<<"m + n = "<<m+n<<endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者Vasac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:45:06