为什么我的程序违例(段异常),怎么才能改好的
求各位大神帮我看看代码:
#include <stdio.h>
#define MAX 100
void Merge(char s[],int length);
void Merge_sort(char s[],int first,int length);
int main(){
char array[MAX];
int len = 0;
int i= 0;
printf("please input array:\n");
while (scanf("%c",&array[len]) != EOF)
len ++;
printf("transfer function:\n");
Merge_sort(array,0,len);
printf("the sorted array is:\n");
while(array[i] != '\0'){
printf("%c",array[i]);
printf(" ");
i ++;
}
printf("\n");
system("pause");
}
void Merge(char s[],int length){
int n1,n2;
n1 = length/2;
n2 = length - n1;
int i,j,k;
char s1[n1-1],s2[n2-1];
for(i = 0;i < n1;i++)
s1[i] = s[i];
for(j = 0;j < n2 ;j++)
s2[j] = s[n1+j];
s1[i+1] = 'e';
s2[j+1] = 'e';
i = j = 0;
for(k = 0;k < length;k++){
if ((s1[i] > s2[j])&& s1[j] != 'e'){
s[k] = s2[j];
j++;
}
else if ((s1[i] < s2[j])&& s1[i] != 'e'){
s[k] = s1[i];
i++;
}
}
}
void Merge_sort(char s[],int first ,int length){
int mid;
if (length > first){
mid = length /2;
Merge_sort(s,first,mid);
Merge_sort(s,mid,length);
Merge(s,length);
}
}
[解决办法]
format一下,慢慢看。。。
#include <stdio.h>
#define MAX 100
void Merge(char s[],int length);
void Merge_sort(char s[],int first,int length);
int main(){
char array[MAX];
int len = 0;
int i= 0;
printf("please input array:\n");
while (scanf("%c",&array[len]) != EOF)
len ++;
printf("transfer function:\n");
Merge_sort(array,0,len);
printf("the sorted array is:\n");
while(array[i] != '\0'){
printf("%c",array[i]);
printf(" ");
i ++;
}
printf("\n");
//system("pause");
return 0;
}
void Merge(char s[],int length){
int n1,n2;
n1 = length/2;
n2 = length - n1;
int i,j,k;
char s1[n1-1],s2[n2-1];
for(i = 0;i < n1;i++)
s1[i] = s[i];
for(j = 0;j < n2 ;j++)
s2[j] = s[n1+j];
s1[i+1] = 'e';
s2[j+1] = 'e';
i = j = 0;
for(k = 0;k < length;k++){
if ((s1[i] > s2[j])&& s1[j] != 'e'){
s[k] = s2[j];
j++;
}
else if ((s1[i] < s2[j])&& s1[i] != 'e'){
s[k] = s1[i];
i++;
}
}
}
void Merge_sort(char s[],int first ,int length){
int mid;
if (length > first){
mid = length /2;
Merge_sort(s,first,mid);
Merge_sort(s,mid,length);
Merge(s,length);
}
}
void Merge_sort(char s[],int first ,int length){//参数名字有歧义,改为start和end好些
int mid;
if (length > first){
mid = length /2;//改为mid = (start+end)/2;
Merge_sort(s,first,mid);//Merge_sort(s, start, mid);
Merge_sort(s,mid,length);//Merge_sort(s, mid+1, end);
Merge(s,length); //实现也要更改
}
}