[英]The Print statements don't show up in the C++ game
所以我正在嘗試使用 C++ 編寫游戲。 我正在使用這個在線編譯器,所以我也可以在學校使用它。 這個程序只是我開始制作的一個簡單的點擊游戲。 當我測試它以查看代碼到目前為止是否有效時,沒有顯示任何內容,考慮到我在代碼中為玩家提供指示的打印語句,這很奇怪。
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int SCORE = 0;
int LEVEL = 1;
int COST = 50;
int ADDSCORE = 10;
char KEYINPUT;
bool GAMEON = true;
printf("Press space bar to gain points to your score.\n");
printf("Press z key to upgrade your score multiplyer.\n");
printf("Press the escape key (esc) to quit.\n");
printf("Upgrade score multiplyer = %d.\n", COST);
printf("Score multiplyer = LV%d.\n", LEVEL);
printf("Score = %d.\n", SCORE);
while (GAMEON == true) {
if (KEYINPUT == 32) {
SCORE += ADDSCORE;
}
if (KEYINPUT == 122) {
ADDSCORE += 10;
SCORE -= COST;
COST *= 2;
LEVEL += 1;
}
if (KEYINPUT == 27) {
GAMEON = false;
}
}
printf("Game has ended. You may now close out of the game");
return 0;
}
我不確定這是我的代碼還是在線編譯器,但我在不同的編譯器上執行並得到了相同的結果。 沒有。 不完全確定為什么會發生這種情況,但是如果有人能發現問題所在,您可以告訴我。
我在我的系統上嘗試了一些本地編譯器,文本也沒有打印。 現在首先,如果你想用 C++ 編寫代碼,你需要使用 C++。 printf
實際上是一個 C 函數。 您沒有在示例中使用任何 C++ 特定代碼。 但是,如果您想在 C++ 應用程序中使用 C,請使用 C 庫的 C++ 等效項,在您的情況下將是<cstdio>
。 現在問題本身:我在 Windows 上使用 MSYS shell,我假設您使用類似的東西。 使用printf
時,輸出緩沖區似乎有問題。 通常,輸出緩沖區在輸入的末尾用\\n
換行符刷新。 顯然,這在某些情況下似乎不起作用。 在我的情況下,在輸出末尾添加一個 fflush(stdout) 並且文本是從緩沖區打印的,並且還直接從 Windows 命令行調用它,而不刷新緩沖區,就可以了。 所以我認為你的 shell 如何處理緩沖區是一個問題。 現在到解決方案。 每次要打印時都刷新輸出緩沖區,或者開始使用 C++ IO。 同樣如上所述,您需要在程序運行時初始化和更改 KEYINPUT 中的值。
#include <iostream>
using namespace std;
int main()
{
int SCORE = 0;
int LEVEL = 1;
int COST = 50;
int ADDSCORE = 10;
char KEYINPUT;
bool GAMEON = true;
/* Use cout instead of printf for output operations */
cout << "Press space bar to gain points to your score." << endl
<< "Press z key to upgrade your score multiplyer." << endl
<< "Press the escape key (esc) to quit" << endl
<< "Upgrade score multiplyer = " << COST << endl
<< "Score multiplyer = LV" << LEVEL << endl
<< "Score = " << SCORE << endl;
while (GAMEON == true) {
KEYINPUT = cin.get(); /* You need to initialize the value before using and change it in the loop */
if (KEYINPUT == 32) {
SCORE += ADDSCORE;
}
if (KEYINPUT == 122) {
ADDSCORE += 10;
SCORE -= COST;
COST *= 2;
LEVEL += 1;
}
if (KEYINPUT == 27) {
GAMEON = false;
}
}
cout << "Game has ended. You may now close out of the game" << endl;
return 0;
}
最后的一點說明:由於我在開始時嘗試做類似的小游戲,因此您需要使用平台相關庫來捕獲那些鍵擊,如 ESC 或其他未直接放入輸入緩沖區的鍵。 我知道 Windows 的 conio,否則 winapi 有很好的文檔記錄並且相對易於使用。 還有很多關於如何使用 winapi 從命令行窗口捕獲擊鍵的示例,這些示例可以在 google 上輕松找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.