2013-03-04 7 views
12

Ogni volta che immetto una variabile utilizzando 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 di cin e cout più cose sulla stessa riga nel prompt dei comandi. È possibile?Come posso inserire variabili usando cin senza creare una nuova riga?

+0

@andre Quando si preme return dovrebbe rimanere sulla stessa riga. –

+1

No. Non è un linguaggio. È come funziona la finestra della console. –

+0

Ok, grazie. –

risposta

8

Non è possibile utilizzare cin o qualsiasi altro input standard per questo. Ma è certamente possibile ottenere l'effetto che stai cercando. Vedo che sei su Windows utilizzando Visual Studio, quindi puoi utilizzare, ad 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'input di caratteri non stampabili. Ma dovrebbe darti un'idea di cosa devi fare. Potresti anche essere interessato allo Windows API keyboard functions.

Se si desidera un pubblico più ampio, è necessario esaminare alcune librerie multipiattaforma, ad esempio SFML o SDL.

0

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

1

Non credo che ciò che si vuole 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.

2

Come altri hanno notato, non è possibile farlo con cin, ma è possibile farlo con getchar(). Che cosa si dovrebbe fare è:

  1. raccogliere ogni carattere utilizzando singolarmente getchar() (aggiunta di ogni al fine di una string come si legge, ad esempio), quindi
  2. dopo aver letto ogni personaggio, decidere 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 valori), quindi
  3. se hai raggiunto la fine del testo per una variabile, converti la stringa di caratteri che hai inserito in una variabile del tipo appropriato (es. int, double, ecc), quindi
  4. uscita qualsiasi contenuto sulla linea che potrebbe essere necessaria, e quindi
  5. proseguire per la prossima variabile che stai leggendo in.

Gestione degli errori robustamente sarebbe essere complicato quindi non ho scritto alcun codice per questo, ma puoi vedere l'approccio che potresti usare.

+0

: Quando ho visto la risposta di @Benjamin Lindley ho cercato di scrivere un codice veloce per farlo con 'getchar()' come avevo suggerito e ho scoperto che non potevo. A prescindere da ciò che ho fatto (ad esempio, il flushing dell'output, ecc.) Non sono riuscito a scrivere l'output fino a quando non avevo premuto "Invio" sulla riga di input, quindi non potevo intercettare input e output sulla stessa linea. – Simon

3

è possibile utilizzare anche lo spazio per ingresso invece di entrare qualcosa di simile:

cin >> a >> b >> c; 

e in ingresso si digitare

10 20 30 

poi

a=10 
b=20 
c=30 
0

Basta usare il gotoxy dichiarazione. puoi premere 'invio' e inserire valori nella stessa riga per es. in ingresso di un 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

'int main'! : P Ti prego, dagli dei, di 'che non scrivi questo codice nel mondo reale. – Xupicor

0

non posso commentare, ma se si lascia spazi tra interi allora si può ottenere l'effetto desiderato. Funziona anche con cin.

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

Se si immettono i valori come 10 20 30 poi vengono memorizzati in a, b, e C rispettivamente.

Problemi correlati