2015-03-01 1 views
0

Я начинаю программировать. Я работаю с. Моя программа должна производить что-то вроде этого:В каком цикле я должен поставить функцию печати?

> Give me a number: 4 
> Pattern is: 
**** * 
*** ** 
** *** 
* **** 

Мое решение:

#include <stdio.h> 

int main() 
{ 
    int row, c, n, t, temp; 

    printf("Give me a number: "); 
    scanf("%d",&n); 

    temp = n; 


    for (row = 0 ; row <= n ; row++) 
    { 
     for (c = 0 ; c < temp ; c++){ 
     printf("*"); 

     } 

     for (t = n ; t >= temp ; t--){ 
     printf(" "); 
     printf("*"); 
     } 

     temp--; 

     printf("\n"); 
    } 

    return 0; 
} 

Мой код производит это когда я даю 4 в качестве входных данных:

**** * 
*** * * 
** * * * 
* * * * * 
* * * * * 

Где я должен поставить свою printf(" "); чтобы это исправить?

спасибо.

+0

Есть две проблемы. См. Мой ответ –

+0

относительно вызовов scanf() (и семейства) всегда проверяйте возвращаемое значение (а не цель ввода/преобразования), чтобы убедиться, что вход/преобразование было успешным. И.Е. if (1! = scanf ("% d", & n)) {// то с ошибкой scanf, ошибка обработки} – user3629249

ответ

0

перед циклом

#include <stdio.h>                

int main()                  
{                    
    int row, c, n, t, temp;              

    printf("Give me a number: ");            
    scanf("%d",&n);                

    temp = n;                 


    for (row = 0 ; row <= n ; row++)           
    {                   
     for (c = 0 ; c < temp ; c++){           
     printf("*");               

     }                   

     printf(" ");                
     for (t = n ; t >= temp ; t--){           
     printf("*");               
     }                   

     temp--;                 

     printf("\n");                
    }                   

    return 0;                 
} 
1

Место printf(" "); наружная (перед) вторая for петля.

for (row = 0 ; row < n ; row++) // Change row <= n to row < n 
{ 
    for (c = 0 ; c < temp ; c++){ 
     printf("*"); 
    } 
    printf(" "); // Out side the loop 
    for (t = n ; t >= temp ; t--){ 
     printf("*"); 
    } 

    temp--; 
    printf("\n"); 
} 
0

printf(" ") должен быть перед for (t = n ; t >= temp ; t--) и
for (row = 0 ; row <= n ; row++) должен быть изменен на for (row = 0 ; row < n ; row++)

Ваш код должен нравится:

#include <stdio.h> 

int main() 
{ 
    int row, c, n, t, temp; 

    printf("Give me a number: "); 
    scanf("%d",&n); 

    temp = n; 

    for (row = 0 ; row < n ; row++) 
    { 
     for (c = 0 ; c < temp ; c++){ 
     printf("*"); 

     } 

     printf(" "); 

     for (t = n ; t >= temp ; t--){ 
     printf("*"); 
     } 

     temp--; 

     printf("\n"); 
    } 

    return 0; 
} 
1

Две вещи. Сначала переместите printf("") снаружи второго цикла цикла и добавьте n-1 в первый цикл.

... 
    for (row = 0 ; row <= n-1 ; row++) //<---- fix 
    { 
     for (c = 0 ; c < temp ; c++){ 
     printf("*"); 
    } 

    printf(" "); //<----- fix 
    for (t = n ; t >= temp ; t--){ 
    printf("*"); 
    } 
    ... 
0

Используйте это:

int main() 
{   
    int tmp; 
    printf("\n"); 
    scanf("%d",&tmp); 
    for (int i = 0 ; i < tmp ; i++) 
    {   
     for (int j = 0; j <= tmp-i; j++) 
      printf("*"); 
     printf(" "); 

     for (int j = 0; j <= i; j++) 
      printf("*"); 
     printf("/n");   
    } 
    return 0; 
} 
1

следующий код предложил исправить. этот код работает правильно для всех допустимых значений, если пользовательский ввод

нотных лимитирующим на то, что пользователь может ввести отметить ошибку проверки как на входе пользователя и зсапЕ()

Обратите внимание на использование комментариев ясно укажите, что выполняется на каждом этапе программы.

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int row, c, temp; 
    int n = 0; // user input number 
    int t = 0; // number of trailing * to print 

    while((n<1) || (n >50)) 
    { 

     printf("Give me a number (1...50): "); 

     if(1 != scanf("%d",&n)) 
     { // then scanf failed 
      perror("scanf for number failed"); 
      exit(EXIT_FAILURE); 
     } 

     // implied else, scanf successful 

     if((n<1) || (n >50)) printf("\n number not in range 1...50\n"); 
    } // end while 

    temp = n; 


    for (row = 0 ; row < n ; row++) 
    { // fore each row 

     // calculate number of leading * to pring 
     temp = n - row; 

     // print leading * 
     for (c = 0 ; c < temp ; c++) 
     { // for each * before space 
      printf("*"); 
     } 

     // print space 
     printf(" "); 

     // calculate number of trailing * to print 
     t++; 

     for (c = 0; c < t; c++) 
     { 
      printf("*"); 
     } 

     printf("\n"); 
    } // end for 

    return 0; 
} // end function main 
Смежные вопросы