微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这段代码在 ANSI C 中出现编译错误?

如何解决为什么这段代码在 ANSI C 中出现编译错误?

我正在一个名为 UVa Online Judge站点解决一个基本的 C 问题,但我遇到了一个似乎与编译器选项有关的错误

ANSI C 5.3.0 - GNU C Compiler with options: -lm -lcrypt -O2 -pipe -ansi -DONLINE_JUDGE

问题(以问题 id 为前缀)是 UVa 100 3n+1 problem 如下。它可以在 Visual Studio 2019 上编译和运行,没有错误站点报告了“编译错误”。该网站不会显示任何错误消息,只会在其公告中显示 Compile Error


#include <stdio.h>
int get_cycle_length(int n);

int main() {
    int i,j;
    int l,r;
    int max;
    int n;
    int cycle_length;
    char line[10000] = { 0 };
    size_t line_len = sizeof(line),read_len = 0,pos = 0;
    while (scanf(" %d%d",&i,&j) != EOF) {
        l = i > j? j: i;
        r = i > j? i: j;
        max = -1;
        for (n = l; n <= r; n++) {
            cycle_length = get_cycle_length(n);
            if (cycle_length > max)
                max = cycle_length;
        }

        read_len = snprintf(line+pos,line_len-pos,"%d %d %d\n",i,j,max);
        if (pos+read_len > line_len) {
            printf("%.*s",(int)pos,line);
            pos = 0;
        }
        pos += read_len;

        // printf("%d %d %d\n",max);
    }
    printf("%.*s",line);
    return 0;
}

int get_cycle_length(int n) {
    int count = 0;
    while (n != 1) {
        count++;
        n = n & 1? 3*n+1: n/2;
    }
    count++;
    return count;
}

解决方法

您在代码中使用了 C++ 风格的注释,即 //

许多 C 编译器将允许这些类型的注释作为扩展,但严格的 ANSI C 不允许。您需要使用 C 样式注释 /* ... */

所以不是这样:

// printf("%d %d %d\n",i,j,max);

这样做:

/*
printf("%d %d %d\n",max);
*/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。