cin.get() 是否一次读取多个数字字符?

Is cin.get() reading multiple digit characters at once?

我们的老师要求我们编写一个简单的 C++ 程序,按照以下格式将两个数字相加:

input: 12 14
output: m+n = 26

该程序还必须适用于以下形式的其他输入:

input: Hello please add 12 and 14 !
output: m+n = 26

给出的解决方案是:


    #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;}

但现在我需要知道为什么这个程序也适用于非个位数的数字。 cin.get(char) 不应该只读一个数字和 cin.putback() return 一样吗?请帮助我,我是初学者。

是的,cin.get()一次只会读取一个字符。

真正读取数字的重要部分是下面的 4 行:cin>>m;。这将消耗尽可能多的数字并将生成的整数存储在 m.

更多细节:

// example with input 524 42

while(cin.get(ch))        // extract one character at a time
{                         // ch='5', remaining input="24 42"
    if(isdigit(ch))       // if it's a digit (0-9), then:
    {                         
        cin.putback(ch);  // Put it back into the stream, "unread" it
                          // remaining input="524 42"
        cin >> m;         // extract an integer from stream
                          // m=524, remaining input="42"    
        break;
    }
}

循环的原因似乎是在数字出现之前跳过任何非数字输入。请注意,这里有一个小错误,因为它也会忽略前导标志。 (例如输入 -4 4 将输出 m + n = 8