Can';t按Ctrl+;D达到EOF
嗨,我是C语言的新手,所以我仍然对一些事情感到困惑,但是我要去那里。我正在尝试实现mergesort,我认为我已经正确地实现了它 当我编译并运行程序时,它会等待我给它输入。没关系,我给你5 4 3 2 1。然后我按下Ctrl+D,什么也没发生。它在终端的开头显示^D,但没有到达文件的结尾,并将我的排序数组吐出。不太清楚为什么会这样?我试着用打印行调试它,但似乎不知道为什么。这可能与scanf有关吗?谢谢Can';t按Ctrl+;D达到EOF,c,arrays,sorting,pointers,mergesort,C,Arrays,Sorting,Pointers,Mergesort,嗨,我是C语言的新手,所以我仍然对一些事情感到困惑,但是我要去那里。我正在尝试实现mergesort,我认为我已经正确地实现了它 当我编译并运行程序时,它会等待我给它输入。没关系,我给你5 4 3 2 1。然后我按下Ctrl+D,什么也没发生。它在终端的开头显示^D,但没有到达文件的结尾,并将我的排序数组吐出。不太清楚为什么会这样?我试着用打印行调试它,但似乎不知道为什么。这可能与scanf有关吗?谢谢 #include <stdio.h> #include <stdlib.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ARRAY_MAX 30000
void merge(int *a, int *w, int length){
int i = 0;
int j = (length/2);
int k = 0;
while ((i < length/2) && (j < length)){
if (a[i] < a[j]){
w[k] = a[i];
i++;
k++;
}
else if (a[j] < a[j]){
w[k] = a[j];
j++;
k++;
}
}
if (i >= length/2){
for (; j < length; i++){
w[k] = a[j];
k++;
}
}
else{
for (; i < length/2; i++){
w[k] = a[i];
k++;
}
}
}
/*mergesort, requires a workspace*/
void merge_sort(int *a, int *w, int length){
int i;
if (length < 2){
return;
}
merge_sort(a, w, length/2);
merge_sort(a+(length/2), w, (length-(length/2)));
merge(a,w,length);
/*copy workspace back to original array*/
for (i=0; i < length; i++){
a[i] = w[i];
}
}
int main(void){
int my_array[ARRAY_MAX];
int workspace[ARRAY_MAX];
clock_t start, end;
int i;
int count = 0;
while ((count < ARRAY_MAX) && (1==scanf("%d", &my_array[count]))){
count++;
}
printf("debug");
start = clock();
merge_sort(my_array, workspace, count);
end = clock();
for (i=0; i < count; i++){
printf("%d\n", my_array[i]);
}
fprintf(stderr, "%d %f\n", count, (end-start)/(double)CLOCKS_PER_SEC);
return EXIT_SUCCESS;
}
#包括
#包括
#包括
#定义数组_MAX 30000
无效合并(int*a,int*w,int-length){
int i=0;
int j=(长度/2);
int k=0;
而((i=长度/2){
对于(;j
这不是Ctrl+D不起作用的问题,而是您的算法。请换
while ((i < length/2) && (j < length)){
if (a[i] < a[j]){
w[k] = a[i];
i++;
k++;
}
else if (a[j] < a[j]){
w[k] = a[j];
j++;
k++;
}
}
while((i
到
while((i
由于a[j]
始终为false,因此它将无限循环。
您的合并排序算法也不正确。有关更多详细信息,您可以查看的示例代码。尝试按
CTRL+Z
它只是说已停止。所以也许我的代码有点不对劲,但我不知道它是什么。你在用哪个操作系统?错误是“filename.exe已停止工作”之类的吗?我正在使用带有Unix提示的macosx。我有一种感觉,这与我的代码有关,因为我以前制作的排序程序在我按下ctrl D键后吐出了排序后的数组。屏幕截图显示了发生了什么。注意,我按下Ctrl D,但什么也没发生,所以我按下control C
while ((i < length/2) && (j < length)){
if (a[i] < a[j]){
w[k] = a[i];
i++;
k++;
}
else {
w[k] = a[j];
j++;
k++;
}
}