Считывание входных чисел, разделенных пробелами

это может быть общий вопрос новичка, но я еще не нашел ответа, который работает для меня.

в настоящее время я пишу программу для класса, который принимает ввод пользователя (который может быть одно или несколько чисел, разделенных пробелами), затем определяет, является ли число простым, совершенным, или не. Если число является совершенным, то оно будет отображать делители.

до сих пор я уже написал код для простого, совершенного и перечисления делителей. Я застрял. входная часть моей программы. Я не знаю, как заставить вход, разделенный пробелами, проходить через мои петли по одному.

Это моя текущая программа:

cout<<"Enter a number, or numbers separated by a space, between 1 and 1000."<<endl;
cin>>num;

while (divisor<=num)
    if(num%divisor==0)
    {
        cout<<divisor<<endl;
        total=total+divisor;
        divisor++;
    }
    else divisor++;
if(total==num*2)
    cout<<"The number you entered is perfect!"<<endl;
else cout<<"The number you entered is not perfect!"<<endl;


if(num==2||num==3||num==5||num==7)
    cout<<"The number you entered is prime!"<<endl;

else if(num%2==0||num%3==0||num%5==0||num%7==0)
    cout<<"The number you entered is not prime!"<<endl;
else cout<<"The number you entered is prime!"<<endl;

return 0;

он работает, но только для одного числа. Если бы кто-нибудь мог помочь мне получить возможность читать несколько входов, разделенных пробелами, это было бы очень признательно. Также, просто Примечание стороны, я не знаю, сколько чисел будет введено, поэтому я не могу просто сделать переменную для каждого из них. Это будет случайное количество чисел.

спасибо!

3 ответов


по умолчанию cin считывает с входа, отбрасывая любые пробелы. Итак, все, что вам нужно сделать, это использовать делать while цикл для чтения ввода более одного раза:

do {
   cout<<"Enter a number, or numbers separated by a space, between 1 and 1000."<<endl;
   cin >> num;

   // reset your variables

   // your function stuff (calculations)
}
while (true); // or some condition

Я бы рекомендовал прочитать строку в строку, а затем разделить ее на основе пробелов. Для этого вы можете использовать getline(...)


вы хотите:

  • прочитайте всю строку из консоли
  • обозначьте линию, разделив вдоль пробелов.
  • поместите эти разделенные части в массив или список
  • шаг через этот массив / список, выполняя ваши тесты prime/perfect/etc.

что ваш класс охватил по этим направлениям до сих пор?