プロが教えるわが家の防犯対策術!

大学の講義で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)」
と出てきてしまいます。

残るこのエラーだけが解決できません。どなたか、間違っている点がわかる方はいませんでしょうか。お願いします。

A 回答 (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;
}

入力チェックの方が長い。。。
    • good
    • 0

検査する年が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;
}
    • good
    • 0

直接的には、例えば、「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) : と書きたかったのだろう(これでも、記述としては間違っていますが)と勝手に解釈したのですね。
ですから、エラーの内容が、「)が足りません。」だったわけです。
    • good
    • 0

#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");
}
}

これでいけると思いますけど・・・
    • good
    • 0

こんにちは。



 下記サイトをご参照下さい。
  http://gihyo.jp/dev/serial/01/c-programming-intr …
  if文の括弧の中の表記が間違いだと思います。

では。
    • good
    • 0

完全に間違っています。


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

スゴいコードだなぁ。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!