Comment utiliser Cin Space en c++?
Disons que nous avons un code:
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;
}
comment créer un symbole D'espace à partir d'une entrée standard? Si vous écrivez espace, le programme ignore! :( Y a-t-il une combinaison de symboles (par exemple 's' ou quelque chose comme ça) qui signifie "Espace" que je peux utiliser à partir de l'entrée standard pour mon code?
8 réponses
il saute tous les espaces (espaces, onglets, nouvelles lignes, etc.) par défaut. Vous pouvez soit modifier son comportement, ou un peu différent mécanisme. Pour modifier son comportement, utilisez le manipulateur noskipws
comme suit:
cin >> noskipws >> a[i];
mais, puisque vous semblez vouloir regarder les caractères individuels, je suggère d'utiliser get
, comme ceci avant la boucle
cin.get( a, n );
Remarque: get
cessera de retirer les caractères du flux s'il trouve une nouvelle ligne (\n
) ou après N-1. Il s'arrête tôt pour ajouter le caractère nul () au tableau. Vous pouvez en lire plus sur le
istream
interface ici.
#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;
}
pour entrer une ligne entière contenant beaucoup d'espaces, vous pouvez utiliser getline(cin,string_variable);
par exemple:
string input;
getline(cin, input);
Ce format capture tous les espaces de la phrase jusqu' return
est enfoncée
Utiliser cin.get()
pour lire le caractère suivant.
Toutefois, pour ce problème, il est très inefficace pour lire un caractère à la fois. Utilisez le istream::read()
à la place.
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;
}
et utilisez ==
à vérifier l'égalité, non pas =
.
en utilisant cin > > l'opérateur laisse tomber l'espace principal et arrête l'entrée au premier espace arrière. Pour saisir une ligne entière de saisie, y compris les espaces, essayez cin.getline()
. Pour saisir un caractère à la fois, vous pouvez utiliser cin.get()
.
j'ai pensé que je partagerais la réponse qui a fonctionné pour moi. La ligne précédente s'est terminée par une nouvelle ligne, donc la plupart de ces réponses n'ont pas fonctionné. Ce n':
string title;
do {
getline(cin, title);
} while (title.length() < 2);
en supposant que l'entrée est toujours au moins 2 caractères, ce qui a fonctionné pour ma situation. Vous pouvez aussi essayer simplement de le comparer à la chaîne "\n"
.
Essayez ceci tous les quatre sens de prendre une entrée avec espace :)
#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]='';
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))='';
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;
}
j'ai le même problème et j'ai simplement utilisé cin.getline(input,300);
.
noskipws
et cin.get()
parfois ne sont pas faciles à utiliser. Depuis que vous avez la bonne taille de votre tableau essayez d'utiliser cin.getline()
qui ne se soucie pas de n'importe quel caractère et lire la ligne entière dans le nombre de caractères spécifié.