2013-03-04 42 views
12

每當我使用cin輸入一個變量時,在一次命中輸入後它會自動進入一個新行。我很好奇,如果有一種方法可以使用cin而不需要換一個新行。我想在命令提示符的同一行輸入cincout多個事物。這可能嗎?如何在不創建新行的情況下使用cin輸入變量?

+0

@andre當你按回車它應該保持在同一行。 – 2013-03-04 19:28:05

+1

不是。這不是語言。這是控制檯窗口的工作原理。 – 2013-03-04 19:31:08

+0

好的,謝謝。 – 2013-03-04 19:32:02

回答

8

您不能使用cin或任何其他標準輸入。但是,獲得你想要的效果當然是可能的。我看到您使用Visual Studio在Windows上,因此您可以使用例如_getch。這是一個讀取直到下一個空格並將結果存儲在字符串中的示例。

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

這不是很好。例如,它不能很好地處理非打印字符輸入。但它應該讓你知道你需要做什麼。您可能也對Windows API keyboard functions感興趣。

如果您想要更廣泛的受衆,您需要查看一些跨平臺的庫,如SFMLSDL

0

這是不可能的。引用@Bo Persson,它不是由C++控制的,而是控制檯窗口。

1

我不認爲你想要做的事情可以用cin來實現。你可以做的是把你所有的輸入寫入一行,並用你選擇的分隔符來解析輸入字符串。

2

正如其他人已經指出,你不能這樣做與cin,但你可以做到這一點getchar()。你必須做的是:

  1. 收集單獨使用getchar()(添加每到一個string結束,因爲它被讀入,例如),然後
  2. 讀取每個字符後的每個字符,決定何時您已達到一個變量值的末尾(例如,通過檢測輸入中的一個或多個' '字符,如果您正在讀取的值爲intdouble值),則
  3. 如果您已達到文本的末尾一個變量,將已經構建的字符串轉換爲相應類型的變量(例如intdouble,等等),然後
  4. 輸出任何內容到可能需要的線路,然後
  5. 繼續,你在讀下一個變量。穩健

處理錯誤會因爲我沒有爲此編寫任何代碼,但你可以看到你可以使用的方法。

+0

更正:當我看到@Benjamin Lindley的回答時,我試着寫了一些快速代碼,用'getchar()'來做到這一點,正如我的建議,並發現我不能。無論我做了什麼(例如,刷新輸出等),直到我在輸入行上按下「Enter」後,輸出才能寫入,因此我無法在同一行中插入輸入和輸出。 – Simon 2013-03-04 21:08:09

3

你也可以用空間的輸入,而不是進入 是這樣的:

cin >> a >> b >> c; 

,並輸入您鍵入

10 20 30 

然後

a=10 
b=20 
c=30 
0

只使用gotoxy聲明。您可以按'enter'並在例如 的同一行輸入值。在輸入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'! :神請說,請不要在現實世界中編寫這樣的代碼。 – Xupicor 2016-12-04 06:23:13

0

我不能評論,但如果你留下整數之間的空格,那麼你可以得到想要的效果。這也適用於cin

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

如果您輸入的值爲10 20 30那麼它們將分別存儲在a,b和c中。

相關問題