![](/img/trans.png)
[英]Printing a Pattern with While loops and only using three output statements in C
[英]Printing one fewer “*” per line using while loops in C
用戶使用while循環指定初始編號后,每行打印少一顆星。
這是一個學校項目,因此我不是要您回答就只需要指出正確的方向。
int main() {
int number;
int stars;
char st = '*'; //using char to setup the "*"
printf("please enter a positive number:");
scanf("%d", &stars);
while (stars > 0) {
stars = (char) st; //tryin to convert number eneter to a char
stars = stars - 1;
printf("%c \n", stars);
}
return 0;
}
我迷路了,應該將整數轉換為char還是?
跟着這些步驟:
從用戶那里讀取星星的數目(您幾乎完全正確,應該檢查一下scanf()
返回1。
使用for
循環並遞減star
並在0
停止。
在循環中,編寫另一個循環,打印*
star
副本和換行符
而已! 返回0。
你已經是什么里面while
循環的變星在下降......所以如果你進入10
變stars
將是10
, 9
, 8
,...,直到它0
...現在讓我們仔細想一想,當您的可變stars
等於10
您想打印十顆星,對嗎? 你怎么做呢? 答案是另一個循環 ,例如一個for
循環或另一個while
循環,就像您將變量star從用戶的輸入迭代到0
,因此,它基本上在做與您已經做過的相同的事情。
這是一個提示,而不是printf("%c \\n", stars)
(實際上會打印ASCII碼等於stars
的字符 ),您應該使用printf("%c", st)
或printf("%c", '*')
直接,因為您需要打印字符*
並且應該在while循環內執行幾次stars
號操作, 然后在該循環的末尾打印新行 。
簡而言之:
0
而您實際上正在這樣做。 starts = i
的值starts = i
您必須打印i
次*
,然后用另一個循環執行此操作,就像您已經做過的那樣,然后在該循環的每次迭代結束時打印新行。 據我所知,您遇到了一些問題:
stars = (char) st;
創建“行”的星星stars = (char) st;
行,但是那樣行不通:您真正要做的就是將star的ASCII值(即42)分配給stars
變量。 while
循環永遠不會結束,因為即使在每次迭代中從42中減去1,您都將42分配給了stars
變量。 st
變量(星形字符),而是打印stars
變量,我相信您應該使用該變量來計算尚未打印的星形數。 " \\n"
,而不是將所有星號保持在同一行。 您可以通過從現有的打印語句中刪除這些字符並在循環末尾使用另一個打印語句來解決此問題(或暫時不使用該字符,直到其余的工作為止)。 希望能有所幫助,如果您需要更多信息,請告訴我。
編輯:
為了幫助您調試程序,您可以在其他語句之間簡單地添加一些打印語句,以查看程序執行時變量值的樣子……這可能會提示您發生了什么問題。 例如,要查看stars
變量在每次循環迭代中如何變化,請使用printf("stars = %d\\n", stars);
在while
循環中。 當然,這會打擾您的星形打印,但是一旦程序表現出來,就可以刪除那些調試打印語句。
您需要的是以下內容。 刪除這些陳述
while (stars > 0) {
stars = (char) st; //tryin to convert number eneter to a char
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
stars = stars - 1;
printf("%c \n", stars);
^^^^^^^^^^^^^^^^^^^^^^^
}
您必須輸出字符st
。 變量starts
用作循環迭代的計數。
在語句之前的循環內
stars = stars - 1;
放置一個for循環,該循環將在字符st
確切時間starts
輸出。
並刪除此聲明
int number;
因為代碼中未使用變量number
。
就這些。:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.