2014-01-19 26 views
0

好的,我已經知道一些人會生氣我問這個問題,因爲已經有這麼多,但我似乎可以看出它的任何意義;你如何在C/C++中獲得即時輸入(單個字符)?我正在慢慢地走向一所古老的學校,「像塞爾達傳說一樣的遊戲」,到目前爲止,這個運動看起來不錯,但即時輸入會讓它變得更好。C/C++即時輸入

林也相信我做錯了char和旁邊的數字,如果任何人都可以幫助我,或提供教程或鏈接,我將非常感激。

另外,當研究'goto'功能時,我發佈了許多人說這是混亂和混亂。是的,這有點耗時,但至少不會讓我感到混亂或混亂。任何人都可以解釋所有的仇恨嗎?

無論如何,抱歉地嘟on着,這是我迄今爲止的代碼,如果我犯了大量的新秀錯誤,隨時可以投入我的工作。

// movement test 


#include <iostream> 
#include <stdio.h> 


int main(void){ 

char move[101]; 



one: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n O=== \n ==== \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto one; 
} 
if (*move == 'a') { 
    goto one; 
} 
if (*move == 's') { 
    goto five; 
} 
if (*move == 'd') { 
    goto two; 
} 



two: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n =O== \n ==== \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto two; 
} 
if (*move == 'a') { 
    goto one; 
} 
if (*move == 's') { 
    goto six; 
} 
if (*move == 'd') { 
    goto three; 
} 



three: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==O= \n ==== \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto three; 
} 
if (*move == 'a') { 
    goto two; 
} 
if (*move == 's') { 
    goto seven; 
} 
if (*move == 'd') { 
    goto four; 
} 



four: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ===O \n ==== \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto four; 
} 
if (*move == 'a') { 
    goto three; 
} 
if (*move == 's') { 
    goto eight; 
} 
if (*move == 'd') { 
    goto four; 
} 



five: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n O=== \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto one; 
} 
if (*move == 'a') { 
    goto five; 
} 
if (*move == 's') { 
    goto nine; 
} 
if (*move == 'd') { 
    goto six; 
} 



six: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n =O== \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto two; 
} 
if (*move == 'a') { 
    goto five; 
} 
if (*move == 's') { 
    goto ten; 
} 
if (*move == 'd') { 
    goto seven; 
} 



seven: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==O= \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto three; 
} 
if (*move == 'a') { 
    goto six; 
} 
if (*move == 's') { 
    goto eleven; 
} 
if (*move == 'd') { 
    goto eight; 
} 



eight: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ===O \n ==== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto four; 
} 
if (*move == 'a') { 
    goto seven; 
} 
if (*move == 's') { 
    goto twelve; 
} 
if (*move == 'd') { 
    goto eight; 
} 



nine: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n O=== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto five; 
} 
if (*move == 'a') { 
    goto nine; 
} 
if (*move == 's') { 
    goto thirteen; 
} 
if (*move == 'd') { 
    goto ten; 
} 



ten: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n =O== \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto six; 
} 
if (*move == 'a') { 
    goto nine; 
} 
if (*move == 's') { 
    goto fourteen; 
} 
if (*move == 'd') { 
    goto eleven; 
} 



eleven: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n ==O= \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto seven; 
} 
if (*move == 'a') { 
    goto ten; 
} 
if (*move == 's') { 
    goto fifteen; 
} 
if (*move == 'd') { 
    goto twelve; 
} 



twelve: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n ===O \n ==== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto eight; 
} 
if (*move == 'a') { 
    goto eleven; 
} 
if (*move == 's') { 
    goto sixteen; 
} 
if (*move == 'd') { 
    goto twelve; 
} 



thirteen: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n ==== \n O=== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto nine; 
} 
if (*move == 'a') { 
    goto thirteen; 
} 
if (*move == 's') { 
    goto thirteen; 
} 
if (*move == 'd') { 
    goto fourteen; 
} 



fourteen: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n ==== \n =O== \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto ten; 
} 
if (*move == 'a') { 
    goto thirteen; 
} 
if (*move == 's') { 
    goto fourteen; 
} 
if (*move == 'd') { 
    goto fifteen; 
} 



fifteen: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n ==== \n ==O= \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto eleven; 
} 
if (*move == 'a') { 
    goto fourteen; 
} 
if (*move == 's') { 
    goto fifteen; 
} 
if (*move == 'd') { 

}goto sixteen; 



sixteen: 
move[100] = 0; 
std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n ==== \n ==== \n ==== \n ===O \n"; 
std::cin >> move; 

if (*move == 'w') { 
    goto twelve; 
} 
if (*move == 'a') { 
    goto fifteen; 
} 
if (*move == 's') { 
    goto sixteen; 
} 
if (*move == 'd') { 
    goto sixteen; 
} 




    return 0; 
} 
+1

如何獲取單個字符而不需要返回被按下是平臺相關的。你在寫什麼平臺,或者,在每個角色之後要求回報是否可以接受? – icktoofay

+1

另外,對於'goto's,爲每個位置重複所有的代碼似乎沒有一點混亂嗎? – icktoofay

+1

goto的東西是它讓你閱讀你的代碼非常乏味。爲了理解你的代碼,人們必須多次閱讀它才能遵循流程。這也通常表明缺乏對更好地完成工作的工具的理解。 goto是比其他工具更好的設計選擇的情況很少,如果不是的話。在你的情況下,甚至不清楚你使用goto來完成什麼。我建議你在使用該語言之前不要使用它。那麼你將會「成熟」到足以正確使用它(如果有的話) – ApplePie

回答

1

首先,你是要創建的每個動作,玩家可以做一個條件?

然後,如果您希望標準輸入上只有1個字符,則可以使用函數Getchar,它與c或C++中的相同。

我要去給你介紹這個網站上:GetcharGetchar

如果你想避免按「Enter」鍵,就可以在RAW模式下

system ("/bin/stty raw"); 

==>這要去發送所有的炭直接在標準輸入

[C]實施例:

#include <stdio.h> 

int main() 
{ 
    int c; 
    puts ("Enter text. Include a dot ('.') in a sentence to exit:"); 
    system ("/bin/stty raw"); 
    do { 
    c=getchar(); 
    putchar (c); 
    } while (c != '.'); 

    system ("/bin/stty cooked"); 
    return 0; 
} 
+0

哎喲,upvoted意外:(你應該已經介紹[本網站](http://en.cppreference.com/w/cpp/io/c/getchar)而不是 – Basilevs

+0

我相信他希望儘快得到輸入因爲這個字符被按下了,而不是在按下'enter'之後,所以這沒有幫助。 –

+0

@NathanS,getchar不會等待EOL。 – Basilevs

相關問題