【发布时间】:2014-10-14 03:11:20
【问题描述】:
在下面的 main 方法中,我试图调用一个排序函数,并且在函数从用户输入中选择后者之后,它必须在最后使用 for 循环相应地打印排序。但是我有一个警告,上面写着“循环将最多运行一次(循环增量从未执行)”指向array[arraySize]。它是否与上面的返回类型或其他 for 循环有关?这里发生了什么事?谁能指出并解释一下。非常感谢!下面是代码:
int main()
{
long array[100], arraySize;
char sort;
long maxi = 100;
for(arraySize = 0; arraySize < maxi; arraySize++)
{
printf("Enter any positive integer, enter 0 to stop: ");
scanf("%li", &num);
if(num < 0) {
arraySize--;
printf("I said positive!");
count++;
}
else if(num == 0) {
maxi = arraySize;
}
else {
array[arraySize]=num;
arraySize--;
}
}
printf("Please enter A for ascending or D for descending order\n");
scanf("%s", &sort);
bubble_sort(array, arraySize, sort); //calling the sort function
printf(" Sorted list in the selected order:\n");
for (arraySize = 0; arraySize < num; arraySize++) {
printf("%ld \n", array[arraySize]);
puts("");
return 0;
}
}
编辑:感谢大家的所有建议。我确实做了一些改变,这就是我到目前为止所做的。现在它正在跳过 A/D 用户输入以及 bubble_sort 函数逻辑。以下是它作为最终输出的作用: 注意:long num 被声明为全局变量!
int main()
{
long array[100], arraySize;
char sort;
long maxim = 100;
for(arraySize = 0; arraySize < maxim; arraySize++)
{
printf("Enter any positive integer, enter 0 to stop: ");
scanf("%li", &num);
if(num < 0)
{
arraySize--;
printf("I said positive! \n");
count++;
}
else if(num == 0)
{
maxim = arraySize;
}
else
{
array[arraySize]=num; //arraySize--;
}
}
printf("Please enter A for ascending or D for descending order: \n");
scanf("%c", &sort);
bubble_sort(array, maxim, sort); //calling the sort function
printf("Sorted list in the selected order:\n");
for (arraySize = 0; arraySize < maxim; arraySize++)
{
printf("%ld \n", array[arraySize]);
}
puts("");
return 0;
}
任何更多的建议将不胜感激!
【问题讨论】:
-
为什么你每次都在那个for循环中做
arraySize--?arraySize++究竟什么时候会显示出它的真面目?它不会在整个循环中始终保持相同的状态,除非num == 0,因为只有这样代码才没有使用arraySize--。else部分应该只包含array[arraySize] = num;而没有其他内容,让arraySize在此之后增加 1,以便可以在下一个索引处添加新值。 -
char sort; .... scanf("%s", &sort);不好。 -
@nIcEcOw
arraySize每次我都不必在bubbleSort函数的循环中使用arraySize-i -
@pointing_Stack 同意
scanf("%s",...将接受用户输入,但会将结果存储为字符串。如果用户输入A,那么'A'将存储在sort中,'\0'将存储在下一个地址中——谁知道那个会做什么?建议改为scanf(" %c", &sort。 -
@pointing_Stack BTW:最佳实践:检查
scanf()系列函数的结果,即使看起来没有必要。