【发布时间】:2021-11-10 14:11:32
【问题描述】:
我正在为 coursera 上的一个问题编写一个简单的算法,当我开始通过 scanf() 输入值时,我的程序只是冻结。它没有执行甚至不存在循环。当它在我的笔记本电脑上不起作用时,我在一个在线编译器中尝试了它,但它在那里也不起作用。我在 Coursera 的类似算法问题上遇到了同样的问题。
附:需要完整的代码来回答这个问题。
int main()
{
int distance;
scanf("%d", &distance);
int range;
scanf("%d", &range);
int pumps;
scanf("%d", &pumps);
int disPump[pumps];
for(int i = 0; i < pumps; i++){
scanf("%d", &disPump[i]);
}
//Program is never reaching this line and is just freezing
printf("Loop terminated.");
int minRefuel = calcRefuel(distance, range, disPump, pumps);
}
int calcRefuel(int distance, int range, int disPump[], int pumps){
// Array will be sorted here in ascending order using bubble sort.
for(int i = 0; i < pumps - 1; i++){
for(int j = 0; j < pumps - i - 1; j++){
if(disPump[j] > disPump[j+1]){
int temp = disPump[j];
disPump[j] = disPump[j+1];
disPump[j+1] = temp;
}
}
}
// main algorithm starts here.
int distCovered = 0;
int refill = 0;
while(1){
int nearestPump = locatePump(range, disPump, pumps, distCovered);
distCovered += nearestPump;
refill++;
if((distCovered+range) >= distance){
break;
}
}
return refill;
}
int locatePump(int range, int disPump[], int pumps, int distCovered){
range += distCovered;
int i = 0;
// Doubt about while.
while(range >= disPump[i] && range < disPump[i+1]){
i++;
}
return disPump[i] - distCovered;
}
【问题讨论】:
-
可能卡在
calcRefuel并且没有刷新之前的输出。发帖minimal reproducible example. -
另外你应该检查
scanf返回值以确保输入被接受。 -
试试
printf("output with no newline"); fflush(stdout);或者,也许更简单:printf("outout with newline\n"); -
"这意味着它从未到达函数 calcRefuel。"不一定,这可能意味着打印输出尚未刷新,程序挂在
calcRefuel中。尝试在阅读后回显输入,以确认程序正在查看您认为您提供的内容。 -
fflush(stdout)允许printf用于调试。