web-dev-qa-db-fra.com

Comment saisir des variables à l'aide de cin sans créer de nouvelle ligne?

Chaque fois que je saisis une variable à l'aide de cin, après une frappe, elle passe automatiquement à une nouvelle ligne. Je suis curieux de savoir s'il existe un moyen d'utiliser cin sans le laisser passer à une nouvelle ligne. Je veux cin et cout plusieurs choses sur la même ligne dans la commande Invite. Est-ce possible?

12
Thomas Boxley

Vous ne pouvez pas utiliser cin ou toute autre entrée standard pour cela. Mais il est certainement possible d’obtenir l’effet recherché. Je vois que vous utilisez Windows avec Visual Studio, vous pouvez donc utiliser, par exemple, _getch . Voici un exemple qui lit jusqu'au prochain espace et stocke le résultat dans une chaîne.

#include <conio.h> // for _getch

std::string get_Word()
{
    std::string Word;
    char c = _getch();
    while (!std::isspace(c))
    {
        Word.Push_back(c);
        std::cout << c;
        c = _getch();
    }
    std::cout << c;
    return Word;
}

Ce n'est pas très bon. Par exemple, il ne gère pas très bien la saisie de caractères non imprimables. Mais cela devrait vous donner une idée de ce que vous devez faire. Vous pouvez également être intéressé par les fonctions du clavier de l'API Windows .

Si vous voulez un public plus large, vous voudrez peut-être vous intéresser à des bibliothèques multiplates-formes, comme SFML ou SDL .

8
Benjamin Lindley

vous pouvez également utiliser un espace pour la saisie au lieu de saisir

cin >> a >> b >> c;

et en entrée vous tapez

10 20 30

puis

a=10
b=20
c=30 
4
Amir

Comme d'autres l'ont fait remarquer, vous ne pouvez pas faire cela avec cin, mais vous pouvez le faire avec getchar(). Ce que vous devez faire c'est:

  1. collecter chaque caractère individuellement à l'aide de getchar() (en ajoutant chacun à la fin d'une string telle qu'elle est lue, par exemple), puis
  2. après avoir lu chaque caractère, décidez quand vous avez atteint la fin de la valeur d'une variable (par exemple, en détectant un ou plusieurs caractères ' ' dans l'entrée, si vous lisez des valeurs int ou double), 
  3. si vous avez atteint la fin du texte pour une variable, convertissez la chaîne de caractères que vous avez intégrée dans une variable du type approprié (par exemple, int, double, etc.), puis
  4. afficher le contenu éventuellement requis sur la ligne, puis
  5. continuez pour la prochaine variable que vous lisez.

La gestion robuste des erreurs serait compliquée, je n'ai donc écrit aucun code pour cela, mais vous pouvez voir l'approche que vous pouvez utiliser.

2
Simon

Je ne pense pas que ce que vous voulez faire puisse être réalisé avec cin. Ce que vous pouvez faire est d'écrire toutes vos entrées sur une seule ligne, avec le séparateur de votre choix, et d'analyser la chaîne d'entrée.

1
SamiHuutoniemi

Ce n'est pas possible. Pour citer @Bo Persson, ce n'est pas quelque chose qui est contrôlé par C++, mais plutôt la fenêtre de la console.

0
Thomas Boxley

utilisez simplement l'instruction gotoxy. vous pouvez appuyer sur 'entrée' et entrer des valeurs sur la même ligne en entrée d'une matrice 3 * 3: 

'#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a[20][20],x,y;
cout<<"Enter the matrix:\n ";
for(int r=2;r<7;r+=2)
for(int c=2;c<7;c+=2)
{gotoxy(c,r);
cin>>a[r][c];
}
getch();}'
0
user3394217

Je ne peux pas commenter, mais si vous laissez des espaces entre les entiers, vous pouvez obtenir l'effet souhaité. Cela fonctionne aussi avec cin.

int a, b, c;
cin>>a; cin>>b; cin>>c;

Si vous entrez vos valeurs sous la forme 10 20 30, elles seront stockées dans a, b et c respectivement.

0
Aman Thakkar