家庭作业:C编程中的数组拆分



为什么我的编码在打印"输入 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*

当 i 被输入并且:

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

当 a 为输入时

在询问字符数组后仔细检查您的 for 循环块。

还要将scanf("%c", ...)更改为scanf(" %c, ...),因为"%c"不会删除尾随空格。

只是在代码中做了一些修改,而不是scanf("%c",&ch);使用了scanf(" %c",&ch);

删除了fflush(stdin);并做了一些长度更改,还删除了 for 循环,因为不需要循环,因为您可以使用 %s 进行字符串输入在斯堪夫

#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);
}

最新更新