为什么我的代码显示运行时错误(NZEC),而我在codechef(gcc 4.8.1)上运行它?

时间:2014-10-21 02:48:21

标签: c gcc runtime-error

问题:你的程序是使用蛮力方法来找到生命,宇宙和万物的答案。更确切地说......从输入到输出重写小数字。读取数字42后停止处理输入。输入的所有数字都是一位或两位数的整数。 实施例

Input:
1
2
88
42
99

Output:
1
2
88

我的尝试:

#include <stdio.h>
void main ()
{
    int number;

    do 
    {
        scanf("%d",&number);

        if (number != 42)
        {
            printf("%d\n",number);
        }
    }while (number != 42);
}

2 个答案:

答案 0 :(得分:2)

我运行了您的代码并出现错误:

警告:'main'的返回类型不是'int'[-Wmain-return-type] void main()

然而它是gcc版本4.2.1

我通过将void的类型声明更改为int并添加返回0来修复它。

#include <stdio.h>

int main ()
{
    int number;

    do
    {
            scanf("%d",&number);

            if (number != 42)
            {
                    printf("%d\n",number);
            }

    }while (number != 42);
    return 0;
}

答案 1 :(得分:2)

NZEC代表non-zero exit code,这意味着您的main函数不会返回零。

如果您在codechef上运行代码,main函数必须返回零,否则codechef会认为您的程序没有成功退出。

总是提醒自己:

int main()
{
    // some code
    return 0;
}

int main(int argc, char *argv[])
{
    // some code
    return 0;
}

void main是C编程语言中的非标准扩展名,在C ++编程语言中是禁止

P.S。

ISO C 90/99/11标准,第5.1.2.2.1节,程序启动:

  

程序启动时调用的函数名为 main 。该   实现声明此函数没有原型。它应该   使用返回类型 int 定义并且没有参数:

    int main(void) { /* ... */ }
     

或有两个参数(此处称为 argc argv ,但任何参数   可以使用名称,因为它们是它们所在的函数的本地名称   声明):

    int main(int argc, char *argv[]) { /* ... */ }
     

或同等的;或者以其他一些实现定义的方式。

ISO C ++ 98/03/11标准,第3.6.1节,主要功能:

  

实现不得预定义 main 函数。这个功能   不得超载。它的返回类型应为 int ,但是   否则其类型是实现定义的。所有实施   应允许 main 的以下定义:

    int main() { /* ... */ }
     

    int main(int argc, char* argv[]) { /* ... */ }