• 締切済み

C言語習いはじめです

大学の講義でC言語を習い始めたのですが、if文でコンパイルするとどうしても解決できないエラーが起こってしまいます。 文の意味は 「4で割り切れる年は”閏年”また、400でも割り切れる年も”閏年”と表示する。100で割り切れる年は”平年”と表示する」 というものです。値は2100で指定しています。 #include <stdio.h> main() { int y; printf(" y=2100; "); { if(y%400:0) { printf("a leap year \n"); {/* 閏年 */} } else if(y%100:0) { printf("a common year \n"); {/* 平年 */} } else if(y%40:0) { printf("a leap year \n"); {/* 閏年 */} } else { printf("a common year \n"); {/* 平年 */} } } return 0; } これをコンパイルすると、どうしても 「エラー E2377 ”ファイル名” 5: If文に ) がない(関数 main)」 と出てきてしまいます。 残るこのエラーだけが解決できません。どなたか、間違っている点がわかる方はいませんでしょうか。お願いします。

みんなの回答

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.7

とりあえず、C言語の文法の勉強しましょう。。。 入力制限多いですが、せっかく作ったので、ぺたぺた。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <limits.h> int main( int argc, char* argv[] ) {  int y = 0;  char input[12];  char* error;  do{   error = NULL;   printf( "年を9桁以内の数値で入力してください(それ以上は左から自動的に切り捨てられます)\n=>" );   scanf( "%9s%*[^\n]%*c", input );   y = strtol( input, &error, 10 );   if ( *error != '\0' )   {    printf( "%s以降は無視されます\n", error );   }  }while( y == 0 || y < 0 );  if ( ((y % 4) == 0) && ((y % 100) != 0) || ((y % 400) == 0))   {   printf("閏年\n", y);  }  else  {   printf("平年\n", y );  }  return 0; } 入力チェックの方が長い。。。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.6

検査する年が2100限定と言うのもすごい設定ですが、出力は「日本語」なんですよね。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include <stdio.h> #include <stdlib.h> #define NBUF 80 int main() { int y; char buf[NBUF]; while (1) { printf("\n年を入力してください: "); if (fgets(buf, NBUF, stdin) == 0) { break; } y = atoi(buf); if ((y % 400) == 0) { printf("閏年\n"); } else if ((y % 100) == 0) { printf("平年\n"); } else if ((y % 4) == 0) { printf("閏年\n"); } else { printf("平年\n"); } } return 0; }

回答No.5

直接的には、例えば、「400で割り切れる」という判断を記述するのが、 y % 400 == 0 であって、 y % 400 : 0 ではないということです。 あと、最初の、printf("y = 2100;"); は、単に、表示させてみようとしたのかな? とは思いますが、これでは、 y には値は設定されません。 y = 2100; ですね。 また、コメントは、{ } で挟む必要はありません。 今回の場合、たまたま影響はありませんが。 ということで、if () の中をそれぞれ、 y % 400 == 0 という形に直し、y を設定できるようにすれば、とりあえず、動くでしょう。 また、明らかに、 if (y%400:0) というような記述で、「)」が足りないというエラーが出るのは、Cに特有でもあります。 コンパイラは、 if (y %400 の次を見て、: を見つけるわけですが、ここに、: が来るような構文はありません。 そこで、「これは、: の前に、) を忘れたのだろう。本当は、 if(y%400) : と書きたかったのだろう(これでも、記述としては間違っていますが)と勝手に解釈したのですね。 ですから、エラーの内容が、「)が足りません。」だったわけです。

noname#108740
noname#108740
回答No.4

#include <stdio.h> void main() { int y; y = 2100; if (((y % 4) == 0) || ((y % 400) == 0))) { printf("a leap year\n"); } else { printf("a common year\n"); } } これでいけると思いますけど・・・

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.3

こんにちは。  下記サイトをご参照下さい。   http://gihyo.jp/dev/serial/01/c-programming-introduction/0015   if文の括弧の中の表記が間違いだと思います。 では。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

完全に間違っています。 少し修正してコンパイルがたとえ通っても根本が違っているので計算はうまくいきません。 C言語の基本的な書き方が理解できていませんので、このサイトの少なくとも8番までの練習問題をクリアできるようになりましょう! http://homepage3.nifty.com/mmgames/c_guide/

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

スゴいコードだなぁ。 どこが間違っている以前に、通常の Cのソースコードの書き方を 1から学習しなおした方が良いでしょう。

関連するQ&A