转换;c99“;循环到常规的东西

转换;c99“;循环到常规的东西,c,C,故事:我尝试将c99脚本转换为常规gcc 问题:输出为空 预期输出:3,2,1 length是数组中的元素数 更新:该脚本用于按降序对数组的元素进行排序 守则: #include <stdio.h> int main() { int arr[] = { 1,2,3 }; int temp = 0; int length = sizeof(arr) / sizeof(arr[0]); int i = 0; int j = i + 1;

故事:我尝试将c99脚本转换为常规gcc

问题:输出为空

预期输出:
3,2,1

length
是数组中的元素数

更新:该脚本用于按降序对数组的元素进行排序

守则:

#include <stdio.h>

int main() {

    int arr[] = { 1,2,3 };
    int temp = 0;
    int length = sizeof(arr) / sizeof(arr[0]);
    int i = 0;
    int j = i + 1;

    for (i < length; i++;) {
        for (j < length; j++;) {
            if (arr[i] < arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }

    int y = 0;

    for (y < length; y++;) {
        printf("%d ", arr[y]);
    }

    return 0;
}
#包括
int main(){
int arr[]={1,2,3};
内部温度=0;
int length=sizeof(arr)/sizeof(arr[0]);
int i=0;
int j=i+1;
对于(i
问题在于for循环的语法

下面是编写循环的正确方法

int i, j;
for (i = 0; i < length; ++i)         // for (initialisation; test condition; operation)
{
    for (j = i + 1; j < length; ++j) // note that j is initialized with i + 1 on each iteration of 
                                     // the outer loop.  That's what makes the bubble sort work.
    {
         /* test and swap if needed */
    }
}

for (i = 0; i < length; ++i)  // note that i is reset to zero, so we can scan the array from 
                              // a known position (the top) to bottom.
{
    /* printout */
}
inti,j;
for(i=0;i
分号位置错误,请将其移到括号内最左边

循环语法为:


对于(初始化器;中断条件;迭代器)

什么是“c99到常规内容”?我在这里没有看到任何特定于C99的内容。您的
for
-循环语法是错误的。您正在使用一个需要初始值设定项的条件,并在需要条件的地方递增;逻辑是错误的。这将编译,但不会达到您可能期望的效果。至少有三个关于无效代码的警告应该来自于此。如果没有发生这种情况,您需要打开警告并将其视为错误。您为(y很奇怪-您有一个条件,您应该进行初始化(或者什么都不做-因此测试根本不做)而
y++
是测试条件,在第一次迭代时失败,因为
y
在第一次迭代时为零或为假,并且是后增量。您的所有代码在C90下都是合法的,更不用说C99、C11或C18了(除非C90不支持自动数组初始化-我需要对此进行研究,我懒得这么做,因为这几乎与20年无关)。@JonathanLeffler您对常量的看法是对的,但指的是
arr[0]
来自
arr
的初始值设定项有一些有趣的问题: