Является ли cin.get() считыванием нескольких цифровых символов одновременно?

#c #io

Вопрос:

Наш учитель попросил нас написать простую программу на 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(символ) не должен просто считывать одну цифру, а cin.putback() возвращать то же самое? Пожалуйста, помогите мне, я новичок.

Ответ №1:

Да, 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 )

Комментарии:

1. Спасибо! Я попытался прочитать те же данные с символом m вместо int m и обнаружил, что все цифры (до нецифрового символа) считываются в переменную int m, но в переменную char m считывается только первый символ. Я предполагаю, что это происходит из-за типа данных. Я попытаюсь исправить ошибку, о которой вы упомянули.