Почему я получаю новую строку, которой там нет - PullRequest
0 голосов
/ 25 февраля 2020

Я изучаю C, и когда я пишу следующий код и компилирую его, печатается одна дополнительная строка.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    //set the int for height
    int height;
    //using do while loop to get the numbers between 1 to 8
    do
    {
        //using get_int helps get the positive number
        height = get_int("How High should be your Pyramid (Choose Between 1 - 8): ");
    }
    //this condition helps locking the numbers entered between 1 to 8
    while (height < 1 || height > 8);
    //for loop used for drawing # on screen at required hight entered by the user
    for (int i = 0; i <= height ; i++)
    {
        //BlankSpace int is used to find the number of blank spaces to move # to the right
        int BlankSpace = height - i;
        for (int k = 0; k < BlankSpace; k++)
        {
            //prints blank space to move right
            printf(" ");
        }
        //this will print # after the blank space
        for (int j = 0; j < i; j++)
        {
            printf("#");
        }
        // move to new line
        printf("\n");
    }
}

Когда я компилирую и запускаю файл, он выводит:
$ How High should be your Pyramid (Choose Between 1 - 8):
Когда мы предоставляем что-нибудь от 1 до 8, оно должно выглядеть следующим образом

$ How High should be your Pyramid (Choose Between 1 - 8): 8
       #
      ##
     ###
    ####
   #####
  ######
 #######
########
$

, но я получаю следующее:

$ How High should be your Pyramid (Choose Between 1 - 8): 8

       #
      ##
     ###
    ####
   #####
  ######
 #######
########
$

Как вы можете видеть между строкой

$ How High should be your Pyramid (Chose Between 1 - 8): 8

       #

стоит помнить, что $ - это приглашение оболочки.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Что такое определение get_int()? Я думаю, что это помещает '\n' в буфер stdout. Если вы удалите height = get_int("How High should be your Pyramid (Chose Between 1 - 8): "); и назначите height = 8;, ваша «проблема» исчезнет.

0 голосов
/ 25 февраля 2020

В этом l oop

for (int i = 0; i <= height ; i++)

При первом запуске i равно 0. Таким образом, for (int j = 0; j < i; j++) l oop, который печатает #, выполняется ноль раз в этой итерации. Таким образом, # не будет напечатано в первой строке, но printf("\n"); все еще происходит, и в результате получается, что пустая строка была напечатана.

Один из способов решить эту проблему - начать с for (int i = 1; вместо 0.

...