Как 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" или что-то вроде этого), что означает "Пространство", которое я могу использовать со стандартного ввода для моего кода?
Ответы
Ответ 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()
, который не заботится ни о каком символе и не читает всю строку в указанном количестве символов.