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?

26
demandé sur Narek 2010-05-04 17:03:19

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.

39
répondu rcollyer 2010-05-04 13:40:16
#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;
}
16
répondu sbi 2010-05-04 13:39:57

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

5
répondu Nidhin David 2015-05-01 16:43:49

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 =.

4
répondu Marcelo Cantos 2010-05-04 13:06:44

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().

2
répondu Odrade 2010-05-04 18:12:16

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".

2
répondu Airhogs777 2016-10-12 10:33:32

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;
}
1
répondu Abhishek Sahay 2017-04-05 06:54:33

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é.

0
répondu HamzeLue 2014-12-08 05:50:56