我正在嘗試使用 C 中的 * 模式列印我的名字“S S”的首字母。但是這些模式是一個接一個地列印的。有沒有辦法使用 * 圖案列印字母,一個在另一個側面,中間有一點空間。我不想為這兩個字母分配一個很大的盒子。我想為單個字母編碼并將它們并排放置,中間留出一些空間。我的代碼和我們的代碼如下:
int k,l,i,j;
for(k=1;k<=7;k ){
for(l=1;l<=4;l ){
if(k==1 && l<=4){
printf("*");
}
else if(k>=2 && k<=3 && l==1){
printf("*");
}
else if(k==4 && l<=4){
printf("*");
}
else if(k>=5 && k<=6 && l==4){
printf("*");
}
else if(k==7 && l<=4){
printf("*");
}
else{
printf(" ");
}
}
printf("\n");
}
for(i=1;i<=7;i ){
for(j=1;j<=4;j ){
if(i==1 && j<=4){
printf("*");
}
else if(i>=2 && i<=3 && j==1){
printf("*");
}
else if(i==4 && j<=4){
printf("*");
}
else if(i>=5 && i<=6 && j==4){
printf("*");
}
else if(i==7 && j<=4){
printf("*");
}
else{
printf(" ");
}
}
printf("\n");
}
return 0;
}
輸出:
****
*
*
****
*
*
****
****
*
*
****
*
*
****
但是,我希望我的預期輸出是:
**** ****
* *
* *
**** ****
* *
* *
**** ****
uj5u.com熱心網友回復:
處理此類問題時最重要的事情是將代碼分解成更小的部分,使用函式和/或 typedef 或結構來組織事物。在您的情況下,您可以使用函式輕松地將如何為您的字母列印星號和空格的“知識”與主代碼(知道哪些字母以何種順序列印)分開。以這種方式重構你的代碼,我們得到:
void S(int k, int l) {
if(k==1 && l<=4){
printf("*");
}
else if(k>=2 && k<=3 && l==1){
printf("*");
}
else if(k==4 && l<=4){
printf("*");
}
else if(k>=5 && k<=6 && l==4){
printf("*");
}
else if(k==7 && l<=4){
printf("*");
}
else{
printf(" ");
}
}
int main() {
int k,l,i,j;
for(k=1;k<=7;k ){
for(l=1;l<=4;l ){
S(k, l);
}
printf("\n");
}
for(i=1;i<=7;i ){
for(j=1;j<=4;j ){
S(i, j);
}
printf("\n");
}
return 0;
}
現在您可以輕松地重寫 main 以并排列印字母
int main() {
int k,l,i,j;
for(k=1;k<=7;k ){
for(l=1;l<=4;l ){
S(k, l);
}
printf(" ");
for(j=1;j<=4;j ){
S(k, j);
}
printf("\n");
}
return 0;
}
您還可以通過以不同的模式撰寫不同的字母來擴展它(盡管每個字母都有一個函式有點冗長 - 最好將所有字母的像素存盤在資料結構中并以這種方式列印)
uj5u.com熱心網友回復:
為要列印的每個字符使用模式矩陣。它將使列印更容易。您遍歷字串的每個字母以列印模式中的每一行。
#include <stdio.h>
#include <string.h>
#define ROWMAX 7
#define COLMAX 5
#define CSPACE 1
#define PATTERN '#'
char cCube [26][ROWMAX][COLMAX] = {
{ {0, 1, 1, 1, 1}, // letter S
{1, 1, 0, 0, 1},
{1, 1, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 1},
{1, 0, 0, 1, 1},
{1, 1, 1, 1, 0}
},
{ {0, 1, 1, 1, 0}, // letter O
{1, 1, 0, 1, 1},
{1, 0, 0, 0, 1},
{1, 0, 0, 0, 1},
{1, 0, 0, 0, 1},
{1, 1, 0, 1, 1},
{0, 1, 1, 1, 0}
},
{ {1, 1, 1, 1, 0}, // letter D
{1, 0, 0, 1, 1},
{1, 0, 0, 0, 1},
{1, 0, 0, 0, 1},
{1, 0, 0, 0, 1},
{1, 0, 0, 1, 1},
{1, 1, 1, 1, 0}
}, //so on for alphabets you want to use
};
int chIndex [256] = {0};
void print_pat_msg (const char* msg) {
int mlen = strlen (msg);
for (int ri = 0; ri < ROWMAX; ri) {
for (int mi = 0; mi < mlen; mi) {
int chi = chIndex[ (unsigned char) msg[mi]];
for (int ci = 0; ci < COLMAX; ci)
(cCube[chi][ri][ci]) ? putchar (PATTERN) : putchar (' ');
for (int spi = 0; spi < CSPACE;) putchar (' ');
}
putchar ('\n');
}
printf ("\n");
}
int main () {
// if patterns are indexed alphabetically below initialisation can be omitted
chIndex[ (unsigned char) 'S'] = 0;
chIndex[ (unsigned char) 'O'] = 1;
chIndex[ (unsigned char) 'D'] = 2;
char message [] = "ODDS";
print_pat_msg (message);
return 0;
}
- 這樣,您可以在一個地方輕松設計/自定義每個字母的圖案。代碼和模式可以重復用于其他訊息和名稱。
- 此處的列印有點像點陣列印機,一次一條地列印出字串中每個字母的圖案線。
- 您還可以用幾乎任何字符替換
0/標志來繪制 ASCII 影像。1您只需調整圖案陣列,易于跟隨和隨意更改。 - 想一想,這就是字體在像素級別的作業方式,模式。
uj5u.com熱心網友回復:
我的快速解決方案:
#include <stdio.h>
static const unsigned char S[] = {0xF0, 0x80, 0x80, 0xF0, 0x10, 0x10, 0xF0};
int main(void) {
for(int i=0; i<sizeof(S); i)
{
for(int b=7;b; --b)
{
printf("%c", "* "[!(S[i] & (1<<b))]);
}
for(int b=7;b; --b)
{
printf("%c", "* "[!(S[i] & (1<<b))]);
}
printf("\n");
}
return 0;
}
輸出:
Success #stdin #stdout 0s 5548KB
**** ****
* *
* *
**** ****
* *
* *
**** ****
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/456459.html
標籤:C
