Домашнее задание: расщепление массива в C-программировании - PullRequest
0 голосов
/ 24 марта 2019

Почему моя кодировка останавливается после печати "Введите a для выровненного или i для отступа"?

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

#include <stdio.h>
#include<stdlib.h>
#define MaxSize 1024
void split(char array[], int start, int length);
void splitAndMove(char array[], int start, int length);
int main(){
    int n,i;
    char ch;
    char string[MaxSize];
    printf("Enter the number of character:\n");
    scanf("%d", &n);
    printf("Enter the character array:\n");
    fflush(stdin);
    for(i = 0;i < n;i++){
        scanf("%c", &string[i]);
        printf("Enter a for aligned or i for indented:\n");
        fflush(stdin);
        scanf("%c", &ch);
        if(ch == 'a')
           split(string, 0, n);
        else if(ch == 'i')
           splitAndMove(string, 0, n);
        return 0;
    }
}
void split(char array[], int start, int length){
    if (start >= length){
        return;
    }
    printf("*%c*\n", array[start]);
    split(array, start+1, length);
}
void splitAndMove(char array[], int start, int length){
    int i;
    if(start >= length){
        return;
    }
    for(i = 0; i <= start;i++){
         printf(" ");
    }
    printf("*%c*\n", array[start]);
    splitAndMove(array, start+1, length);
}

Я должен ожидать, что результат будет выглядеть так:

*H*
 *E*
  *L*
   *P*

, когда я введуи:

*H*
*E*
*L*
*P*

при вводе а

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

Только что сделал некоторую модификацию в коде вместо scanf("%c",&ch); использовал scanf(" %c",&ch);

Удалено fflush(stdin); и сделано несколько изменений в длине, а также удалено для цикла, поскольку не было необходимости в цикле, поскольку вы можете взятьввод строки с %s в scanf

#include <stdio.h>
#include<stdlib.h>
#define MaxSize 1024
void split(char array[], int start, int length);
void splitAndMove(char array[], int start, int length);
int main(){
    int n,i;
    char ch;
    char string[MaxSize];
    printf("Enter the number of character:\n");
    scanf("%d", &n);
    printf("Enter the character array:\n");
    scanf("%s", string);
    printf("Enter a for aligned or i for indented:\n");
    scanf(" %c", &ch);
    if(ch == 'a')
        split(string, 0, n);
    else if(ch == 'i')
        splitAndMove(string, 0, n);
    return 0;
}
void split(char array[], int start, int length){
    if (start >= length){
        return;
    }
    printf("*%c*\n", array[start]);
    split(array, start+1, length);
}
void splitAndMove(char array[], int start, int length){
    int i;
    if(start >= length){
        return;
    }
    for(i = 0; i <= start;i++){
        printf(" ");
    }
    printf("*%c*\n", array[start]);
    splitAndMove(array, start+1, length);
}
0 голосов
/ 24 марта 2019

Дважды проверьте блок for loop после запроса массива символов.

Также измените scanf("%c", ...) на scanf(" %c, ...), так как "%c" не удаляет завершающие пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...