2017-05-20 11 views
0

私は、プログラムが大きなメモリを消費したり、どこかで0で割ったときにランタイムエラーが発生することを知っています。 これは、ユーザータイプ42までのすべての数値を出力するコードです(42は印刷されません)。ランタイムエラーが発生するのはなぜですか?

#include<stdio.h> 
int main() 
{ 
    int n; 
    while(1) 
    { 

     scanf("%d",&n); 
     if(n==42) 
      break; 
     else 
      printf("%d",n); 

    } 
} 

このような単純なコードでランタイムエラーが発生するのはなぜですか?

+4

どのようなランタイムエラーですか?完全なエラーメッセージを書式付きテキストとして投稿してください。 – ForceBru

+0

_time limit_ですか? – BLUEPIXY

+0

「実行時エラー」はコーデックで示されます。 – explorer

答えて

1

あなたの主な機能はintを返さなければならず、そうではありません。そのため、ランタイムエラーが発生します。ここで正しいコードは次のとおりです。

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int n = 0; 
    while(1) { 

     scanf("%d",&n); 
     if(n == 42) 
      break; 
     else 
      printf("%d",n); 

    } 
    return EXIT_SUCCESS; 
} 

また、あなたはstdlib.hを含めない場合return 0;return EXIT_SUCCESS;を変更するが、ここでwhy it's betterであることができます。

また、CodeChef以外のIDEを使用することを検討する必要があります。 CodeBlocksやVisualStudioは、エラーや警告の方がよりよく明示的です。また、使用する前にint nを0に設定する必要があります。

+0

だから、リターン0を追加して働いていた...しかし、**ランタイムエラーと、この関係は何である**ランタイムエラーの概念が似ている?あなたは、スタックからの大量のメモリを消費している場合は、ランタイムエラーが右、発生? – explorer

+0

ランタイムエラーとは、あまりにも多くのメモリを使用しているという意味ではありません。それはちょうど、コンパイラはコンパイル時にエラーを見ていないので、エラーが実行時に発生したと言います。それはメモリの問題になる可能性がありますが、必ずしもそうではありません。 – Sisyphe

+0

プログラムは、それが非ゼロのコードで終了しますエラーが発生しました。 codechefはそこにいくつかの問題があなたのプログラム –

1

CodeChef上で動作しているとき、それは以外あるので、これは完全に正常に動作します。

C標準(少なくともC99とC11)によると、は、暗黙のうちに何かを返さずに終了します。だから、return 0main()の末尾につけておくことをお勧めしますが、それをスキップするのは間違いありません。

しかし、CodeChefで実行している場合はそうではありません。何らかの理由で、メインがreturn 0で終わっていないと、ランタイムエラーとしてそれを踏みにじる。

関連する問題