c - c (cs50) 中嵌套 for 循环中的变量范围

标签 c scope cs50

在这段代码中,我应用选择排序,为什么不能在有注释的行使用变量 i ?谢谢

void sort(int values[], int n)
{
    for (int i = 0; i < (n-2); i++){
        int iSmallest = i;
        for(int j = i + 1; j < (n-1); j++){
            if(values[j] < values[iSmallest])/*Why can't I use values[i] instead of values[iSmallest]?*/
            iSmallest = j;
    }

    int temp = values[i];
    values[i] = values[iSmallest];
    values[iSmallest] = temp;
}

最佳答案

在内循环中,您需要跟踪迄今为止找到的最小元素的索引。

在内循环开始时,您将获取您查看的第一个元素的索引,即 i ,并初始化iSmallest接着就,随即。当您找到较小的元素之后的元素时,您将更新 iSmallest到该元素的索引。

然后,当完成内循环时,使用该索引将最小元素与 i 处的元素交换。 。这会将最小元素放在索引 i 处。然后你增加 i并重复,找到下一个最小的元素。

变量i并不超出您评论的行的范围。 if(values[j] < values[i]) 在语法上是合法的在那一行,但排序无法正常工作。

关于c - c (cs50) 中嵌套 for 循环中的变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728946/

相关文章:

c - 为什么这种质数检查在某些非质数上返回 true?

c - 这种 printf 格式是否可行(左对齐符号和零符号)?

在运行时更改标签颜色

C sscanf ("%hhx") 读取 unsigned int 而不是 unsigned char

javascript - Javascript 中的作用域和 OR 运算符

spring - 如何从单例中生成原型(prototype)对象? (需要设计帮助)

c - C语言新手;在 for 循环中使用 pow()

ssis - 在连接表达式中插入用户变量时出现问题

c - fread 返回与 nmemb 相同的数字,但已到达文件末尾

c - 如何在 c 中使用 argc、argv[] 的同时提示用户输入?