2015-03-12 3 views
0

Я пытаюсь получить следующий шаблон символа следующим образом, используя только циклы «для» или «в то время», но без операторов «if» или «if-else»: (Упомянуто в блоке кода)Шаблоны символов в C

Мне трудно понять способ сделать первый символ отображаемым как пустое пространство или представить его даже как нулевой символ. Ниже приведен мой код:

#include <stdio.h> 
#include <conio.h> 

int main() 
{ 
    char ch[6], j='\0'; 
    int p,q,n,i; 
    printf("Enter a character\n"); 
    for (n = 0; n < 5; n++) 
    { 
     scanf_s(" %c", &ch[n], 1); 
    } 
    printf("\n"); 
    for (i = 4; i >= 0; i--) 
    { 
     for (p = 4; p >= i; p--) 
     { 
      printf("%c", ch[p+1]-1);// _-->A blank space  
     }       // BA     
     printf("\n");    // CBA  
    }        // DCBA 
            // EDCBA 
    _getch(); 
    return 0; 
} 

Я не могу понять, куда я иду, не можете ли вы помочь?

+0

'scanf_s ("% С", & ч [п], 1);' является что normal: '"% c "'? – axelduch

+0

Использование 'scanf_s («% c », & ch [n], 1)' означает, что перед тем, как прочитать символ, пропущено любое начальное свободное пространство. Это означает, что вы никогда не получите пустой пробел в своих переменных при использовании этой строки формата. Также кажется забавным пригласить «символ», а затем потребовать от пользователя ввести 5 символов. Вы также должны проверить, что 'scanf_s()' преуспевает; проверьте, что он возвращает 1, и что-то делать (например, выйти с сообщением об ошибке), если это не так. –

+1

Вам не хватает случая из вашего вывода (тот, у которого есть только 'A')? –

ответ

1

Я изменил эту

printf("\n"); 
for (i = 4; i >= 0; i--) 
{ 
    for (p = 4; p >= i; p--) 
    { 
     printf("%c", ch[p+1]-1); 
    } 
    printf("\n"); 
} 

для этого

printf("\n_\n"); 
for (i = 1; i < 5; i++) { 
    for (p = i; p >= 0; p--) { 
     printf("%c", ch[p]); 
    } 
    printf("\n"); 
} 

И получил этот выход (консоли):

Введите символ

ABCDE

_

Б.А.

CBA

ДХБС

EDCBA

+0

Да, спасибо, у меня была такая же идея, но тогда мой профессор колледжа не согласился с этим заявлением printf. Но спасибо, помогая .. – Ricky

1
#include <stdio.h> 
#include <conio.h> 

#define SIZE 5 

int main(void){ 
    char ch[SIZE+1] = {0}; 
    int i; 

    printf("Enter a character\n"); 
    for (i = SIZE-1; i >= 0; --i){ 
     scanf_s(" %c", &ch[i], 1); 
    } 
    printf(" \n"); 
    for (i = SIZE-2; i >= 0; --i) { 
     printf("%s\n", ch + i); 
    } 

    _getch(); 
    return 0; 
} 
+0

Хотя этот ответ, вероятно, правильный и полезный, предпочтительнее, если вы включите некоторое объяснение вместе с ним, чтобы объяснить, как оно помогает решить проблему. Это становится особенно полезным в будущем, если есть изменения (возможно, не связанные), которые заставляют его перестать работать, и пользователи должны понимать, как он работал. –

+0

моей идеей является 'printf (" \ n ");'. Описание не представляется необходимым. – BLUEPIXY

Смежные вопросы