it-swarm.it

Come posso inserire variabili usando cin senza creare una nuova riga?

Ogni volta che inserisco una variabile usando cin, dopo l'immissione di un hit, si passa automaticamente a una nuova riga. Sono curioso di sapere se esiste un modo per utilizzare cin senza che sia necessario passare a una nuova riga. Sto desiderando cin e cout più cose sulla stessa riga nel comando Prompt. È possibile?

12
Thomas Boxley

Non è possibile utilizzare cin o altri input standard per questo. Ma è certamente possibile ottenere l'effetto che stai cercando. Vedo che sei su Windows usando Visual Studio, quindi puoi usare, per esempio, _getch . Ecco un esempio che legge fino al prossimo spazio bianco e memorizza il risultato in una stringa.

#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;
}

Non è molto buono. Ad esempio, non gestisce molto bene l'immissione di caratteri non stampabili. Ma dovrebbe darti un'idea di cosa devi fare. Potresti anche essere interessato alle/ Funzioni della tastiera API di Windows .

Se si desidera un pubblico più ampio, si vorrà esaminare alcune librerie multipiattaforma, come SFML o SDL .

8

puoi anche usare lo spazio per l'input invece di inserire qualcosa come questo:

cin >> a >> b >> c;

e in input digiti

10 20 30

poi

a=10
b=20
c=30 
4
Amir

Come altri hanno notato, non puoi farlo con cin, ma potresti farlo con getchar(). Quello che dovresti fare è:

  1. raccogliere ciascun personaggio individualmente usando getchar() (aggiungendo ognuno alla fine di un string come viene letto, per esempio), quindi
  2. dopo aver letto ciascun carattere, decidi quando hai raggiunto la fine del valore di una variabile (ad esempio rilevando uno o più caratteri ' ' nell'input, se stai leggendo in int o double values), allora 
  3. se hai raggiunto la fine del testo per una variabile, converti la stringa di caratteri che hai incorporato in una variabile del tipo appropriato (ad esempio int, double, ecc.), quindi
  4. produrre qualsiasi contenuto sulla linea che potrebbe essere richiesta, e quindi
  5. continua per la prossima variabile che stai leggendo.

Gestire gli errori in modo robusto sarebbe complicato quindi non ho scritto alcun codice per questo, ma puoi vedere l'approccio che potresti usare.

2
Simon

Non penso che quello che vuoi fare possa essere raggiunto con cin. Quello che puoi fare è scrivere tutto il tuo input in una riga, con un delimitatore a tua scelta, e analizzare la stringa di input.

1
SamiHuutoniemi

Non è possibile. Per citare @Bo Persson, non è qualcosa controllato da C++, ma piuttosto dalla finestra della console.

0
Thomas Boxley

basta usare l'istruzione gotoxy. puoi premere 'invio' e inserire valori nella stessa riga per es. nell'input di una 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

Non posso commentare ma se lasci spazi tra interi, puoi ottenere l'effetto desiderato. Funziona anche con cin.

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

Se inserisci i tuoi valori come 10 20 30 allora verranno memorizzati rispettivamente in a, b e c.

0
Aman Thakkar