簡體   English   中英

在C中使用while循環每行少打印一個“ *”

[英]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循環的變星在下降......所以如果你進入10stars將是1098 ,...,直到它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* ,然后用另一個循環執行此操作,就像您已經做過的那樣,然后在該循​​環的每次迭代結束時打印新行。

據我所知,您遇到了一些問題:

  1. 您似乎正在嘗試通過stars = (char) st;創建“行”的星星stars = (char) st; 行,但是那樣行不通:您真正要做的就是將star的ASCII值(即42)分配給stars變量。
  2. 這會導致另一個問題,即while循環永遠不會結束,因為即使在每次迭代中從42中減去1,您都將42分配給了stars變量。
  3. 您不是打印st變量(星形字符),而是打印stars變量,我相信您應該使用該變量來計算尚未打印的星形數。
  4. 最后,您要在每個星號后打印空格和換行符" \\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM