[英]How would i print this on the same line
我正在嘗試編寫一個使用多個字符構建“建築物”的程序。 有3個功能:
1. int ValidateData(int low, int high, char type)
此函數驗證用戶輸入是否滿足所需參數,並根據type
參數返回正確的數字。
這里沒有問題。
int drawUpperFloors(int numOfWindows)
這個函數應該根據用戶輸入的窗口數量來繪制樓層數。 我的問題是我似乎無法讓窗戶在同一條線上繪制。 如果用戶輸入 3,輸出應該是:(花了一段時間才弄對)
+---------------+ | | | === === === | | | | | | | | | | === === === | | |
相反,我在新行上得到一個窗口,直到循環達到其限制( numOfWindows
),所以如果numOfWindows
= 20 那么我在不同的行上得到 20 個窗口。 我希望能深入了解我如何做到這一點。
void DrawGroundFloor(int numOfWindows)
該函數幾乎與drawUpperFloors( )
函數相同,只是第一個窗口將被替換為一扇門。 因此,如果 numOfWindows 參數為 2,則底層將由 1 個門和 1 個窗口組成。 如果窗口數僅為 1,則只會繪制一扇門。
請注意以下細節:a)。 每個窗戶(和門)正好是 3 列寬。
b)。 地板的底部是使用 * 字符繪制的。
一樓有 5 個窗戶的例子是:
+-----------------------+ | | | === === === === === | | | | | | | | | | | | | | | | === === === === | | | | | *************************
考慮到我一直無法執行第二個功能,這不足為奇。
我已經嘗試使用if
和else
最多使用 3 個循環,但我仍然不能,無論我嘗試什么(偶數模數)都將它打印在同一行中。 任何輸入將不勝感激。
編輯這里是到目前為止 2 個函數的代碼
int GetValidData(int low, int high, char type)
{
int number;
int number2;
int i=1;
int j;
if (type == 'F')
{
printf("Enter the amount of floors you would like(1-1000)\n");
scanf("%d", &number);
fflush(stdin);
if (number < 1 || number>1000)
{
while(i!=0)
{
printf("You have entered an invalid floor number\nPlease enter a valid number: ");
scanf("%d", &number);
fflush(stdin);
if (number >= 1 && number <= 1000)
{
printf("Thank you!\n");
i = 0;
}
}
}
return number;
}
printf("Enter the amount of windows you would like(1-20)\n");
scanf("%d", &number);
if (type == 'W')
{
if (number < 1 || number>20)
{
while(i!=0)
{
printf("You have entered an invalid number\nPlease enter a valid number: ");
scanf("%d", &number);
if (number >= 1 && number <= 20)
{
printf("Thank You!\n");
i = 0;
}
}
}
return number;
int drawUpperFloors(int numOfWindows)
{
int check = numOfWindows;
int i;
int j;
for (i = 0; i <= numOfWindows;i++)
{
printf("===\n");
for (j = 0; j <= numOfWindows;j++)
{
printf("| |\n");
}
printf("===");
}
}
我的問題是我似乎無法讓窗戶在同一條線上繪制。
基本問題是您在繪制單個窗口時向打印語句添加換行符。
for (i = 0; i <= numOfWindows;i++)
{
/* There shouldn't be a newline here */
printf("===\n");
for (j = 0; j <= numOfWindows;j++)
{
/* Nor a newline here */
printf("| |\n");
}
printf("===");
}
您還從 0 開始計算您的窗口,這會導致一個窗口過多。 要么從 1 開始,要么一直到i < numOfWindows
。
您必須在自己的循環中繪制每條線,包括外牆,並以換行符結尾。 首先是上門檻,然后是窗戶,然后是下門檻。
void drawUpperFloors(int numOfWindows)
{
int i;
/* Draw the upper sills, including the outer walls */
printf("| ");
for (i = 1; i <= numOfWindows;i++)
{
printf("=== ");
}
printf(" |\n");
/* Draw the windows, including the outer walls */
printf("| ");
for (i = 1; i <= numOfWindows;i++)
{
printf("| | ");
}
printf(" |\n");
/* Draw the lower sills, including the outer walls */
printf("| ");
for (i = 1; i <= numOfWindows;i++)
{
printf("=== ");
}
printf(" |\n");
}
這會變得重復,因此最好將繪制一條地板線放入一個函數中。
void drawFloorLine(int num, const char *to_repeat) {
int i;
printf("| ");
for (i = 1; i <= num;i++)
{
printf("%s", to_repeat);
}
printf(" |\n");
}
void drawUpperFloors(int numOfWindows)
{
drawFloorLine(numOfWindows, "=== ");
drawFloorLine(numOfWindows, "| | ");
drawFloorLine(numOfWindows, "=== ");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.