Подтвердить что ты не робот

Как cin Space в С++?

Скажем, у нас есть код:

int main()
{
   char a[10];
   for(int i = 0; i < 10; i++)
   {
       cin>>a[i];
       if(a[i] == ' ')
          cout<<"It is a space!!!"<<endl;
   }
   return 0;
}

Как соединить символ пространства со стандартного ввода? Если вы пишете место, программа игнорирует!:( Есть ли какая-либо комбинация символов (например, "\ s" или что-то вроде этого), что означает "Пространство", которое я могу использовать со стандартного ввода для моего кода?

4b9b3361

Ответ 1

Он пропускает все пробелы (пробелы, вкладки, новые строки и т.д.) по умолчанию. Вы можете либо изменить свое поведение, либо использовать несколько иной механизм. Чтобы изменить свое поведение, используйте манипулятор noskipws следующим образом:

 cin >> noskipws >> a[i];

Но, поскольку вам кажется, что вы хотите посмотреть на отдельные символы, я бы предложил использовать get, как это до вашего цикла

 cin.get( a, n );

Примечание: get перестанет извлекать символы из потока, если он найдет новую строку char (\n) или после n-1 символов. Он останавливается раньше, так что он может добавить нулевой символ (\0) в массив. Подробнее о интерфейсе istream здесь.

Ответ 2

#include <iostream>
#include <string>

int main()
{
   std::string a;
   std::getline(std::cin,a);
   for(std::string::size_type i = 0; i < a.size(); ++i)
   {
       if(a[i] == ' ')
          std::cout<<"It is a space!!!"<<std::endl;
   }
   return 0;
}

Ответ 3

Чтобы ввести AN ENTIRE LINE, содержащую много пробелов, вы можете использовать getline(cin,string_variable);

например:

string input;
getline(cin, input);

Этот формат фиксирует все пробелы в предложении до нажатия return

Ответ 4

Используйте cin.get() для чтения следующего символа.

Однако для этой проблемы очень неэффективно читать символ за раз. Вместо этого используйте istream::read().

int main()
{
   char a[10];
   cin.read(a, sizeof(a));
   for(int i = 0; i < 10; i++)
   {
       if(a[i] == ' ')
          cout<<"It is a space!!!"<<<endl;
   }
   return 0;
}

И используйте == для проверки равенства, а не =.

Ответ 5

Использование оператора cin → приведет к удалению ведущих пробелов и прекращению ввода в первом конечном пробеле. Чтобы захватить всю строку ввода, включая пробелы, попробуйте cin.getline(). Чтобы захватить один символ за раз, вы можете использовать cin.get().

Ответ 6

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

string title;
do {
  getline(cin, title);
} while (title.length() < 2);

Это предполагало, что входной сигнал всегда имеет длину не менее 2 символов, что сработало для моей ситуации. Вы также можете попробовать просто сравнить его со строкой "\n".

Ответ 7

Попробуйте все четыре способа ввода ввода с пространством:)

#include<iostream>
#include<stdio.h>

using namespace std;

void dinput(char *a)
{
    for(int i=0;; i++)
    {
        cin >> noskipws >> a[i];
        if(a[i]=='\n')
        {
            a[i]='\0';
            break;
        }
    }
}


void input(char *a)
{
    //cout<<"\nInput string: ";

    for(int i=0;; i++)
    {
        *(a+i*sizeof(char))=getchar();

        if(*(a+i*sizeof(char))=='\n')
        {
            *(a+i*sizeof(char))='\0';
            break;
        }

    }
}



int main()
{
    char a[20];

    cout<<"\n1st method\n";
    input(a);
    cout<<a;

    cout<<"\n2nd method\n";
    cin.get(a,10);
    cout<<a;

    cout<<"\n3rd method\n";
    cin.sync();
    cin.getline(a,sizeof(a));
    cout<<a;

    cout<<"\n4th method\n";
    dinput(a);
    cout<<a;

    return 0;
}

Ответ 8

У меня такая же проблема, и я просто использовал cin.getline(input,300);.

noskipws и cin.get() иногда не просты в использовании. Поскольку у вас есть правильный размер вашего массива, попробуйте использовать cin.getline(), который не заботится ни о каком символе и не читает всю строку в указанном количестве символов.