2017-10-05 97 views
0

我目前正在研究我的程序。該程序從用戶接收整型輸入,然後我的程序將打印輸入的ASCII藝術。ASCII藝術(數值)輸出C++

例如:

Input : 123 Output : # ### ### # # # # ### ## # # # # ### ###

的問題是如何打印彼此相鄰多少?我的程序轉換,但輸出變的這樣
OutputBroken

相反:# ### ### # # # # ### ## # # # # ### ###

這裏是我的代碼:

#include <iostream> 

using namespace std; 

int main(){ 
int angka,dpn,blk,tng; 
string abel,ateng,adep; 

cout<<"Masukkan Angka : "; 
cin>>angka; 

blk = angka % 10; 
tng = angka/10 % 10; 
dpn = angka/100; 

switch(blk){ 
    case 0 : abel = "### \n# # \n# # \n# # \n### "; break; 
    case 1 : abel = "# \n# \n# \n# \n# "; break; 
    case 2 : abel = "### \n # \n### \n# \n### "; break; 
    case 3 : abel = "### \n # \n ## \n # \n### "; break; 
    case 4 : abel = "# # \n# # \n### \n # \n # "; break; 
    case 5 : abel = "### \n# \n### \n # \n### "; break; 
    case 6 : abel = "### \n# \n### \n# # \n### "; break; 
    case 7 : abel = "### \n # \n # \n # \n # "; break; 
    case 8 : abel = "### \n# # \n### \n# # \n### "; break; 
    case 9 : abel = "### \n# # \n### \n # \n### "; break; 

} 
switch(tng){ 
    case 1 : ateng = "# \n# \n# \n# \n# "; break; 
    case 2 : ateng = "### \n # \n### \n# \n### "; break; 
    case 3 : ateng = "### \n # \n ## \n # \n### "; break; 
    case 4 : ateng = "# # \n# # \n### \n # \n # "; break; 
    case 5 : ateng = "### \n# \n### \n # \n### "; break; 
    case 6 : ateng = "### \n# \n### \n# # \n### "; break; 
    case 7 : ateng = "### \n # \n # \n # \n # "; break; 
    case 8 : ateng = "### \n# # \n### \n# # \n### "; break; 
    case 9 : ateng = "### \n# # \n### \n # \n### "; break; 

} 

switch(dpn){ 
    case 1 : adep = "# \n# \n# \n# \n# \n"; break; 
    case 2 : adep = "### \n # \n### \n# \n### "; break; 
    case 3 : adep = "### \n # \n ## \n # \n### "; break; 
    case 4 : adep = "# # \n# # \n### \n # \n # "; break; 
    case 5 : adep = "### \n# \n### \n # \n### "; break; 
    case 6 : adep = "### \n# \n### \n# # \n### "; break; 
    case 7 : adep = "### \n # \n # \n # \n # "; break; 
    case 8 : adep = "### \n# # \n### \n# # \n### "; break; 
    case 9 : adep = "### \n# # \n### \n # \n### "; break; 

} 


//cout<<dpn<<endl<<blk<<endl<<tng; /*DebugNumber*/ 

cout<<adep<<ateng<<abel; 
return 0; 
} 
+2

爲線條存儲一個字符串矢量,只有當您知道每行打印什麼時纔打印它們 – user463035818

+0

考慮使用[原始字符串文字](http://en.cppreference.com/w/cpp/language/string_literal )爲[可讀性](http://coliru.stacked-crooked.com/a/82f97eb8976baae9)。 – nwp

+0

您可能不得不將藝術存儲在數組中而不是給\ n。並重復每個數字打印從藝術的頂部到底部。 – crook

回答

1

這是不是C++,它是關於算法。可在例如存儲在下面的結構中的輸出:

using Output = std::vector<std::vector<bool>>; 

和寫一個函數,它增加了一個字符到其中:

void addCharacter(Output o, size_t offset, char theChar) { 
    for (int i=0; i<allLines; i++) 
    addLineOfChar(o, offset, theChar, i); 
} 

void addLineOfChar(Output o, size_t offset, char theChar, int line) { 
    for (int i=0; i<charsInLine; i++) 
    o[offset+i] = data[theChar][line][i]; 
} 

和Et結束打印true作爲#false(空間)。但這只是一個想法。這是你創造最佳算法的工作。

+0

我很抱歉,但我無法理解代碼。我是計算機編程新手。但是,謝謝,也許我以後會需要它 –