Posso obter alguma ajuda com meu dever de casa que têm a ver com a repetição e os argumentos contra-controlado?
Pergunta
Ok, então eu preciso ter a aparência de saída como um diamante de asteriscos, com cada linha crescente por 2 asteriscos até o meio tem 9 asteriscos ... e depois as linhas diminuir. função principal tem de ser:
int main (void){
int i;
i = 0;
while (i < 5){
printline (4-i, i*2+1);
i = i + 1;
}
i = 3;
while (i >= 0) {
printline (4-i, i*2+1);
i = i - 1;
}
return 0;
}
Agora eu devo definir a função PrintLine para imprimir uma única linha da figura cada vez que ele é chamado. Leva 2 argumentos, o número de espaços eo número de asteriscos que devem ser impressos na linha. Use a repetição contador controlado para imprimir o número apropriado de espaços e novamente para imprimir o número apropriado de asteriscos.
char print_line (int spaces, int stars){
for (int i = 4; i>=spaces; i--){
printf(" ");
}
for (int i = 1; i<=stars; i+=2){
printf("*");
}
printf("\n");
}
Woohoo! Estou quase pronto! As saídas meio certo, só que em vez de uma linha com 4 espaços com uma estrela, uma linha com 3 espaços com 3 estrelas, e assim por diante até sem espaços e 9 estrelas, (e seguida, inverte) ... eu recebo uma linha com uma estrela, uma linha com um espaço e 2 estrelas, uma linha com dois espaços de três estrelas, etc, até 4 espaços cinco estrelas (e seguida, inverte) ...
A razão PrintLine é diferente é porque eu tenho problemas de escrita com isso às vezes e eu continuei recebendo itálico sempre que eu tentei escrever isso ...
Solução
Algumas dicas:
- A sua necessidade função só imprimir caracteres, ele não retorna nada (há um tipo de retorno específico para isso)
- O número de espaços e o número de estrelas para impressão são provavelmente inteiros
- Você pode imprimir um único espaço usando
printf(" ");
- Você pode imprimir uma única estrela usando
printf("*");
- Você pode imprimir uma "nova linha" (que vai para a próxima linha) usando
printf("\n");
- Se você disser
int i=0; for(i=0; i<n; i++) { printf("X"); }
você vai imprimir a letraX
um total de vezesn
(você não pode ter aprendido para loops neste momento, se não, use a próxima dica) - Se você disser
int i=0; while(i<n) { printf("X"); i++; }
você também vai imprimir a letraX
um total de vezesn
- Você será muito mais feliz se você usar diferentes
a
eb
nomes de parâmetro. Tente pensar em um nome que corresponde com o que o parâmetro representa ??em>.
A resposta à sua edição:
- Você vai querer usar dois separados voltas; um que imprime os espaços, e depois um que imprime as estrelas
- laços
for
são sempre construídos com um inicializador, uma condição de verificação, e um passo / incremento - Você não deve precisar de valores atribuir a
stars
ouspaces
; são números que lhe foram dadas por quem chama sua funçãoprintline
(ou seja, eles já têm um valor)
A resposta à sua segunda edição:
- Em seus loops
for
, você provavelmente vai querer usar uma variável de índice outros do que o parâmetro sendo passado (por exemplofor(i=0; i<spaces; i++)
, ondei
é apenas um contador você declarar no topo da sua função, como no código da atribuição) em sua construção atual, ele irá tentar imprimir 4 espaços, não importa o que o chamador especificado quando eles chamaram sua função. - Você só precisa de saída da nova linha uma vez, após você é feito com todos os espaços e as estrelas (ou seja outputing a nova linha não pertence dentro de um loop
for
) - Você provavelmente só precisa incrementar seu contador por
1
cada vez que você saída de uma estrela. - Se a atribuição diz para fazer uma função chamada
printline
, você não pode chamá-loprint_line
; que não é a mesma coisa (nem éPrintLine
)
A resposta à sua terceira edição:
- Não se esqueça "Você provavelmente só precisa incrementar seu contador por
1
cada vez que você saída de uma estrela". - Não se esqueça "Sua necessidade função só imprimir caracteres, ele não retorna nada (há um tipo de retorno específico para isso)" (ou seja, ele não deve voltar a
char
) - Eu acho que você deseja que o código que imprime espaços para se parecer mais com o código que imprime estrelas