2016-12-01 6 views
0

このコードを実行した後、ループが特定の数値以上になると、背景の色付けが崩壊することに気付きました。誰かがなぜそれを知っていますか? コード0-15と128 最初のパラメータから 整数をパラメータとして関数が取る これは着色関数TEXTCOLOR(パラメータ1、パラメータ2)であり、C++でC++の多くのループの後に背景の色が崩壊する!どうして?

#include <iostream> 
using namespace std; 

でFONTCOLORと 二番目のパラメータのためのものです背景色のある

#include <Windows.h> 
#define BLACK 0 
#define BLUE 1 
#define GREEN 2 
#define CYAN 3 
#define RED 4 
#define MAGENTA 5 
#define BROWN 6 
#define LIGHTGREY 7 
#define DARKGREY 8 
#define LIGHTBLUE 9 
#define LIGHTGREEN 10 
#define LIGHTCYAN 11 
#define LIGHTRED 12 
#define LIGHTMAGENTA 13 
#define YELLOW 14 
#define WHITE 15 
#define BLINK 128 
HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE); 
void TextColor(int fontcolor, int backgroundcolor) 
{ 
int color_attribute; 
color_attribute = backgroundcolor; 
color_attribute = _rotl(color_attribute, 4) | fontcolor; 
SetConsoleTextAttribute(screen, color_attribute); 
} 

//着色機能

int main() 
{ 


int counter = 1; 
while(counter<=50) 
{ 

    TextColor(0, 15); 
    int i = 0, j; 
    while (i <= 5) 
    { 
     j = 1; 
     while (j <= 28) 
     { 
      cout << " "; 
      j++; 
     } 
     cout << endl; 
     i++; 
    } 
    TextColor(15, 0); 
    cout << endl << endl << endl; 
    counter++; 
} 
system("pause"); 
return 0; 
} 
0をテストするためのメインプログラムこの行のために

New image only 1 textbackground color

+0

互いに知り合わない2つの出力メカニズムを混在させています。 'cout'はおそらくWriteConsoleを使用せず、それがあったとしても、おそらくSetConsoleTextAttributeでバッファリングを調整していないでしょう。色を変更する前に 'cout'バッファをフラッシュしてみてください。 –

+0

何も起こりません:( – kosnet2

答えて

0

:唯一の有効な色は0〜15の間にある場合

TextColor(0, counter%20); 

、正確にあなたがcounter%20式は16-19の間に何かに評価されたときに起こることを期待したのは何?

+0

それは問題ではありません.15以上がパラメータとして入力された場合、関数はそれを独自に修正します。**問題はありません**。 繰り返しの回数を減らしてみてください。記憶の事が起きているようですが、なぜそれが分からないのでしょうか?*試してみてください)* – kosnet2

+0

"Collapses"の意味を詳しく解説できますか?私はあなたが何を意味しているかは完全にはわかりません。 – selbie

+0

また、私はあなたのコードをコンパイルし、うまくいくようです。しかし、おそらく、私はその問題が何を探しているのか正確には分かりません。それは私にとって意味をなさない「崩壊」のことです。 – selbie

関連する問題