我需要更改此代碼以使其可讀且具有更好的編碼風格。基本上它列印了一個由 X 組成的屋頂。最需要更改的行用注釋標記。
int center = width / 2;
for (int i = 0; i < center; i )
{
printf(" ");
}
printf("X\n");
for (int i = 1, j = center - 1, l = 1; i < center; i , j--, l = 2) // This line !
{
for (int h = 0; h < j; h )
{
printf(" ");
}
printf("X");
for(int k = 0; k < l; k )
{
printf(" ");
}
printf("X\n");
}
uj5u.com熱心網友回復:
這不是更具可讀性(抱歉,也許是其他人?),但它確實完全簡化了該行。您可以推斷 j 和 l 而不是增加它們。
int width = 7;
int center = width / 2;
for (int i = 0; i < center; i )
{
printf (" ");
}
printf ("X\n");
for (int i = 1; i < center; i ) // This line !
{
for (int h = 0; h < (center - i); h )
{
printf (" ");
}
printf ("X");
for (int k = 0; k < (((i - 1) * 2) 1); k )
{
printf (" ");
}
printf ("X\n");
}
我確定還有更多改進,但我會讓你去做的:)
uj5u.com熱心網友回復:
使用具有正確含義的變數 使用函式來簡化核心部分
#include "stdio.h"
static void printnspace(int nb) {
for (int i = 0; i < nb; i )
{
putchar(' ');
}
}
int main(void) {
int width = 11;
int center = width / 2;
int mid = 1;
printnspace(center);
printf("X\n");
for (int left = center - 1; left > 0; left--) {
printnspace(left);
putchar('X');
printnspace(mid);
mid = 2;
printf("X\n");
}
return 0;
}
uj5u.com熱心網友回復:
您可以洗掉l并替換對此變數的參考(i - 1) * 2 1。與 相同j,您可以使用center - i. 此外," "您可以一次列印n 個字串,而不是列印n" "次。不知道printf有沒有這樣的功能,如果沒有,你可以將邏輯提取到它自己的功能中。
編輯:最后,你可以澄清的意思center - i,并(i - 1) * 2 1通過它們存盤在變數。
int center = width / 2;
void print_padded_tile(int pad_length) {
for (int i = 0; i < pad_length; i ) {
printf(" ");
}
printf("x");
}
print_padded_tile(center);
printf("\n");
for (int i = 1; i < center; i )
{
int space_count_until_first_tile = center - i;
print_padded_tile(space_count_until_first_tile);
int space_count_until_second_tile = (i - 1) * 2 1;
print_padded_tile(space_count_until_second_tile);
printf("\n");
}
uj5u.com熱心網友回復:
我認為唯一真正的問題是 i,這是不必要的,因為您也可以使用 j。除此之外,我認為很清楚。(我沒有測驗這段代碼,但它應該可以作業。)
int center = width / 2 - 1; //added -1 to make it a bit cleaner later on. Not a big deal though.
for (int i = 0; i <= center; i )
{
printf(" ");
}
printf("X\n");
for (int j = center, l = 1; j > 0; j--, l = 2) // i only existed to make the loop stop, which could easily be shifted to j
{
for (int h = 0; h < j; h )
{
printf(" ");
}
printf("X");
for(int k = 0; k < l; k )
{
printf(" ");
}
printf("X\n");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/324523.html
上一篇:回圈未列印預期結果
下一篇:回圈并回傳一個ID的數字
