C 忽略循环以增加数组的大小
在下面的main方法中,我试图调用一个sort函数,在该函数从用户输入中选择后者之后,它必须相应地打印排序,并在末尾使用for循环。但是我有一个警告,指向C 忽略循环以增加数组的大小,c,loops,for-loop,C,Loops,For Loop,在下面的main方法中,我试图调用一个sort函数,在该函数从用户输入中选择后者之后,它必须相应地打印排序,并在末尾使用for循环。但是我有一个警告,指向数组[arraySize]“循环最多运行一次(循环增量从未执行)”。它与上面的返回类型或其他for循环有关吗?这里发生了什么事?有人能指出并解释一下吗。多谢!下面是代码: int main() { long array[100], arraySize; char sort; long maxi = 100; f
数组[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;
}
}
任何更多的建议将不胜感激 还有一些其他问题,但让我们谈谈您的警告。您有以下代码:
for (arraySize = 0; arraySize < num; arraySize++) {
printf("%ld \n", array[arraySize]);
puts("");
return 0;
}
for(arraySize=0;arraySize
更正后的缩进应该可以清楚地说明为什么循环最多运行一次。您的打印循环似乎有打字错误,应该更正为:
for (arraySize = 0; arraySize < maxi; arraySize++) {
for(arraySize=0;arraySize
对bubble\u sort()的调用也应该使用maxi而不是arraySize。最后输入的字符存储在
sort
中,并且该字符很可能是\n
将
scanf(“%c”,&sort);
更改为scanf(“%c”,&sort);
应该可以解决这个问题。
请注意
%c
为什么每次都在for循环中执行排列--
操作?确切地说排列+++
什么时候才会显示它的真实颜色?在整个循环中,除了num==0
之外,它不会始终保持相同的状态,因为只有这样代码才没有使用排列--
else
部分应该只包含array[arraySize]=num;
而不包含其他内容,让arraySize
在此之后递增1,以便可以在下一个索引处添加新值。char sort;…scanf(“%s”,&sort)
不好。@nIcEcOwarraySize
就是这样,每次我都不必在我的bubbleSort
函数的循环中arraySize-I
!@pointing\u堆栈同意scanf(%s),…
将接受用户输入,但它将结果存储为字符串。如果用户键入a
,则'a'
将存储在排序中,'\0'
将存储在下一个地址中-谁知道这将做什么?建议扫描(%c),而不是&sort
。@pointing_Stack顺便说一句:最佳做法:检查scanf()的结果
函数族,即使它看起来不必要。我更改了它,但它仍然没有解决问题。您是否确保将“返回0”行移到循环之外?是的,我也这样做了!我在类似的程序中使用了此循环,它工作得很好。我仍然不确定它为什么会显示此警告。很抱歉,我还是个初学者。@pointing\u Stack:你明白你的return 0;
语句的意思吗?是的,我把它从这个for循环的范围中移了出来,编辑了一些我现在添加到这里的东西。我从来没有想到过这一点。它确实解决了我遇到的所有问题。非常感谢你!这些小错误都教会了我一些重要的东西。:)
for (arraySize = 0; arraySize < maxi; arraySize++) {