Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C代码中的错误超出了时间限制。我如何克服它?_C_Error Handling_Goto - Fatal编程技术网

C代码中的错误超出了时间限制。我如何克服它?

C代码中的错误超出了时间限制。我如何克服它?,c,error-handling,goto,C,Error Handling,Goto,我试图将这段代码转换为只使用gotos的代码,但当我尝试在在线ide上运行它时,我不断遇到时间限制错误,当我尝试在控制台上运行它时,它甚至没有反应或打印错误 以下是原始代码: void sort (int skip, int ∗A, int length) { for (int n = length ; n > 1 ; n−−) { int i = 0 ; while (true) { if (skip == 0 &&

我试图将这段代码转换为只使用gotos的代码,但当我尝试在在线ide上运行它时,我不断遇到时间限制错误,当我尝试在控制台上运行它时,它甚至没有反应或打印错误

以下是原始代码:

void sort (int skip, int ∗A, int length) {
    for (int n = length ; n > 1 ; n−−) {
        int i = 0 ;
        while (true) {
            if (skip == 0 && i < n−1) {
                if (A[i] > A[i +1]) {
                    A[i] = A[i] ^ A[i+1];
                    A[i +1] = A[i +1] ^ A[i] ;
                    A[i] = A[i] ^ A[i+1] ;
                }
            }else
                break ;
            i++;
       }
   }
}
void排序(int跳过,int∗A、 整数长度){
对于(int n=长度;n>1;n−−) {
int i=0;
while(true){
如果(跳过==0&&iA[i+1]){
A[i]=A[i]^A[i+1];
A[i+1]=A[i+1]^A[i];
A[i]=A[i]^A[i+1];
}
}否则
打破
i++;
}
}
}
这是转换后的代码:

#include <stdio.h>

void sort(int skip,int *A,int length){
    int n=length;
    int i,temp,temp2;
Lcond:
    if(n<=1) goto Lend;
Lbody:
    i=0;
Lcond_:
    if(skip!=0) goto Lelse;
    temp=n-1;
    if(i>=temp) goto Lelse;
Lbody_:
    temp2=i+1;
    if(A[i]>A[temp2]) goto Lbody__;
    i++;
    goto Lcond_;
Lbody__:
    A[i]=A[i]^A[temp2];
    A[temp2]=A[temp2]^A[i];
    A[i]=A[i]^A[temp2];
    i++;
    goto Lcond_;
Lelse:
    goto Lcond;
Lend:
    return;
}
int main(){
    int skip=0;
    int A[5]={3,5,1,4,2};
    int length=5;
    sort(skip,A,length);
    for (int i=0;i<5;i++){
            printf("%d\t",A[i]);
    }
}
#包括
无效排序(int skip、int*A、int length){
int n=长度;
int i、temp、temp2;
Lcond:
如果(n=温度)转到Lelse;
腰身:
temp2=i+1;
如果(A[i]>A[temp2])转到Lbody;
i++;
转到Lcond;
腰身:
A[i]=A[i]^A[temp2];
A[temp2]=A[temp2]^A[i];
A[i]=A[i]^A[temp2];
i++;
转到Lcond;
乐斯:
转到Lcond;
出借:
返回;
}
int main(){
int skip=0;
int A[5]={3,5,1,4,2};
整数长度=5;
排序(跳过、A、长度);

对于(int i=0;i程序永远不会结束,因为唯一的
goto Lend
位于
Lcond:if(n程序永远不会结束,因为唯一的
goto Lend
位于
Lcond:if(我试图将这段代码转换为只使用gotos的代码-为什么???此外,你不应该使用xor交换-如果编译器不聪明,它不知道用使用中间变量的交换替换xor交换。@christiangibons-hem?@ChristianGibbons我想你对xor交换有误解。。但是如果尝试将同一对象与自身交换,而不是与相同的值交换,则xor交换将失败。在处理数组时可能会发生这种情况…我试图将这段代码转换为只使用gotos的代码-为什么???此外,您不应该使用xor交换-如果编译器不聪明,它不知道用使用int的交换替换xor交换ermediate变量。@ChristianGibbons-hem?@ChristianGibbons我想你对异或交换有误解。但是如果试图用同一对象本身而不是同一个值交换异或交换,那么异或交换就会失败。这可能发生在处理数组时……或者从将原始代码转换为新代码的角度来看,
n--
In
for
循环的控制语句没有被转换成任何东西。哦,我明白了,谢谢!谢谢,成功了。我还修复了一些其他错误。或者从将原始代码转换为新代码的角度来看,
for
循环的控制语句中的
n--
没有被转换成任何东西哦,我明白了,谢谢!谢谢,成功了。我还修正了其他一些错误