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 cintrer un symbole Space à partir d'une entrée standard? Si vous écrivez de l'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?
Il saute tous les espaces (espaces, tabulations, nouvelles lignes, etc.) par défaut. Vous pouvez soit modifier son comportement, soit utiliser un mécanisme légèrement différent. Pour changer son comportement, utilisez le manipulateur noskipws
, comme suit:
cin >> noskipws >> a[i];
Mais, comme vous semblez vouloir regarder les différents caractères, je vous suggère d'utiliser get
, comme ceci avant votre boucle
cin.get( a, n );
Remarque: get
arrêtera de récupérer les caractères du flux s'il trouve un caractère de nouvelle ligne (\n
) ou après n-1 caractères. Il s'arrête tôt pour pouvoir ajouter le caractère nul (\0
) au tableau. Vous pouvez en savoir plus sur l'interface istream
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 saisir 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'à ce que return
soit pressé
Utilisez cin.get()
pour lire le caractère suivant.
Cependant, pour ce problème, il est très inefficace de lire un caractère à la fois. Utilisez plutôt la fonction 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;
}
Et utilise ==
pour vérifier l'égalité, pas =
.
L'utilisation de l'opérateur >> de cin supprimera les espaces blancs de tête et arrêtera la saisie au premier espace de fin. Pour saisir une ligne entière d'entrée, y compris les espaces, essayez cin.getline()
. Pour saisir un caractère à la fois, vous pouvez utiliser cin.get()
.
J'ai pensé partager la réponse qui a fonctionné pour moi. La ligne précédente se terminait par une nouvelle ligne, de sorte que la plupart de ces réponses seules ne fonctionnaient pas. Cela a:
string title;
do {
getline(cin, title);
} while (title.length() < 2);
Cela supposait que l'entrée comprenait toujours au moins 2 caractères, ce qui fonctionnait pour ma situation. Vous pouvez également essayer de le comparer simplement à la chaîne "\n"
.
Essayez ces quatre méthodes pour saisir de l'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]='\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;
}
J'ai le même problème et je viens d'utiliser cin.getline(input,300);
.
noskipws
et cin.get()
ne sont parfois pas faciles à utiliser. Puisque vous avez la bonne taille de votre tableau, essayez d'utiliser cin.getline()
qui ne se soucie d'aucun caractère et lisez la ligne entière dans le nombre de caractères spécifié.