無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
TowaK

無題

#1

投稿記事 by TowaK » 15年前

すいません。皆様にお尋ねしたいことがありまして……。
i,j,k,l,mの5つの変数があって、それらを二つ組み合わせた和が整数の平方根になる5つの組み合わせを算出するプログラムを制作しているのですが、コンパイルエラーが出てしまって、実行までたどり着けません^^;
自力で解いてみた結果が下のソースなんですが……。
皆様の知恵を少し貸していただけないでしょうか?
よろしくおねがいします。
コンパイル時のエラーメッセージも一緒に貼りつけさせていただきます。



#include<stdio.h>
#include<math.h>
int max,i=0,j=0,k=0,l=0,m=0,sw;


void root()
{
double ij,ik,il,im,jk,jl,jm,kl,km,lm;
ij=sqrt(long double(i+j));
ik=sqrt(long double(i+k));
il=sqrt(long double(i+l));
im=sqrt(long double(i+m));
jk=sqrt(long double(j+k));
jl=sqrt(long double(j+l));
jm=sqrt(long double(j+m));
kl=sqrt(long double(k+l));
km=sqrt(long double(k+m));
im=sqrt(long double(i+m));

ij=ij-int(ij);
ik=ik-int(ik);
il=il-int(il);
im=im-int(im);
jk=jk-int(jk);
jl=jl-int(jl);
jm=jm-int(jm);
kl=kl-int(kl);
km=km-int(km);
im=im-int(im);

if(im==0&&ik==0&&il==0&&im==0&&jk==0&&jl==0&&jm==0&&kl==0&&km==0&&im==0)
{
printf("現在の合計=%d、%d,%d,%d,%d,%d",i+j+k+l+m,i,j,k,l,m);
scanf("%d",&sw);
return;
}

void plus()
{
if(m==max)
{
m=0;
l++;
}
else
m++;
if(l==max+1)
{
l=0;
k++;
}
if(k==max+1)
{
k=0;
j++;
}
if(j==max+1)
{
j=0;
i++;
}
return;
}

int main()
{
scanf("%d",&max);

while(1)
{
root();
plus();
if(i==max+1)
return 0;
}
}





これよりエラーメッセージ

1>------ ビルド開始: プロジェクト: STG, 構成: Debug Win32 ------
1> main.cpp
1>c:\users\hiroki\desktop\projects\stg\main.cpp(34): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(304) : 'scanf' の宣言を確認してください。
1>c:\users\hiroki\desktop\projects\stg\main.cpp(39): error C2601: 'plus' : ローカル関数の定義が正しくありません。
1> c:\users\hiroki\desktop\projects\stg\main.cpp(7): この行は '{' を含んでいますが、これに対応するものがありません。
1>c:\users\hiroki\desktop\projects\stg\main.cpp(66): error C2601: 'main' : ローカル関数の定義が正しくありません。
1> c:\users\hiroki\desktop\projects\stg\main.cpp(7): この行は '{' を含んでいますが、これに対応するものがありません。
1>c:\users\hiroki\desktop\projects\stg\main.cpp(77): fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\users\hiroki\desktop\projects\stg\main.cpp(7)' で見つかる前に EOF が検出されました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========





どうか、よろしくおねがいします。

toyo

Re:無題

#2

投稿記事 by toyo » 15年前

エラーは '{' に対応するものがないといっています
つまり'}'が足りません

DVDM

Re:無題

#3

投稿記事 by DVDM » 15年前

>>TowaKさん
エラーコードを見ただけで実行まではしていないですが、

[color=gray>> error C2601: 'plus' : ローカル関数の定義が正しくありません… [/color]
root 関数内にある if に使われている { } が対応していないようです。

[color=gray>
if(im==0&&ik==0&&il==0&&im==0&&jk==0&&jl==0&&jm==0&&kl==0&&km==0&&im==0)
{
printf("現在の合計=%d、%d,%d,%d,%d,%d",i+j+k+l+m,i,j,k,l,m);
scanf("%d",&sw);
[color=red> }[/color]
return;[/color]

また、root 関数と plus 関数にあります return ですが、
途中で関数を抜けたりする場合に必要なのであれば書いていても構わないと思いますが、
その必要がないのであれば return を記述する必要はありません。

[color=gray>> C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS[/color]
こちらは警告ですが、気になるのであれば、scanf 関数を scanf_s 関数に変更するか、
プログラムの先頭で #pragma warning(disable:4996) を記述するかで解決できます。

TowaK

Re:無題

#4

投稿記事 by TowaK » 15年前

修正を試みましたが、やはりビルドエラーが吐き出されてしまいます。
もう一度お力をお貸しいただければと思います。
以下に、修正を加えたソースと修正後のエラーメッセージを貼りつけさせていただきます。



#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)

int max,i=0,j=0,k=0,l=0,m=0,sw;


void root()
{
double ij,ik,il,im,jk,jl,jm,kl,km,lm;
ij=sqrt(long double(i+j));
ik=sqrt(long double(i+k));
il=sqrt(long double(i+l));
im=sqrt(long double(i+m));
jk=sqrt(long double(j+k));
jl=sqrt(long double(j+l));
jm=sqrt(long double(j+m));
kl=sqrt(long double(k+l));
km=sqrt(long double(k+m));
lm=sqrt(long double(l+m));

ij=ij-int(ij);
ik=ik-int(ik);
il=il-int(il);
im=im-int(im);
jk=jk-int(jk);
jl=jl-int(jl);
jm=jm-int(jm);
kl=kl-int(kl);
km=km-int(km);
lm=im-int(lm);

if(im==0&&ik==0&&il==0&&im==0&&jk==0&&jl==0&&jm==0&&kl==0&&km==0&&lm==0)
{
printf("現在の合計=%d、%d,%d,%d,%d,%d",i+j+k+l+m,i,j,k,l,m);
scanf("%d",&sw);
}
return;
}

void plus()
{
if(m==max)
{
m=0;
l++;
}
else
m++;
if(l==max+1)
{
l=0;
k++;
}
if(k==max+1)
{
k=0;
j++;
}
if(j==max+1)
{
j=0;
i++;
}
return;
}

int main()
{
scanf("%d",&max);

while(1)
{
root();
plus();
if(i==max+1)
return 0;
}
}


以下、エラーメッセージ


1>------ ビルド開始: プロジェクト: STG, 構成: Debug Win32 ------
1> main.cpp
1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\Users\Hiroki\Desktop\Projects\STG\Debug\STG.exe : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


よろしくおねがいします。

ookami

Re:無題

#5

投稿記事 by ookami » 15年前

プロジェクトを作成するとき、ウィンドウアプリケーションを選択をしてしまったようです。
ウィンドウアプリケーションでは、WinMain関数から実行されますが、それがない、とリンカが言っています。

main関数から実行したい場合は、コンソールアプリケーションに設定します。

TowaK

Re:無題

#6

投稿記事 by TowaK » 15年前

無事コンパイルできました!!
ありがとうございます。皆さんのおかげです。
解決マークを付けさせていただきます☆
またなにかあったら質問させていただくと思うのでその時はよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る