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
)
我们的老师要求我们编写一个简单的 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
)