ページ 1 / 1
戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 02:52
by kenta
戻り値の型と関数の型が一致しないのですがなぜですか?
また、プログラムで間違っているとこがあればご指摘お願いします。
コード:
#include"stdafx.h"
struct seiseki{
char name[30];
int score;
}
int main(void)
{
char k[30];
struct seiseki list[]={{"sato",80},
{"suzuki",75},
{"tanaka",95},
{"takahashi",90}};
fanc(list);
printf("2番目に点数が高い人は%s");
}
void fanc(struct seiseki *list)
{
int i,k,d,top1=0,top2=0;
for(i=0;i<4;i++)
{
if(top1<list[i].score)
{
if(top2<top1)
{
d=k;
}
k=i;
top1=list[i].score;
}
}
return(list[d].name);
}
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 03:36
by zxc
エラーコードなりエラーの原因となる行が分かっているならそれを明示してください。
解決になるかは分かりませんが、fanc関数の戻り値型はvoidとなっているのにlist[d].nameをreturnしてはいけないと思います。
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 04:41
by 初級者
main関数のprintfも、
%sに対応する変数がないので
間違いです。
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 11:16
by kenta
エラーとなっているのはreturn(list[d.name])です。
もし直すとしたらどのように直しを入れれば良いのでしょうか?
あと、このプログラムはまだ完成していなくて、出来るところまでやったものです。
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 11:49
by rozeo
list[d].nameはchar型の配列なので
char *func( struct seiseki *list )
に。
また戻り値を格納するchar型の配列を用意して、printfに書式に指定してください
char name[ 30 ] = func( list );
printf( "2番目に成績の高い人は%s",name );
訂正
strcpy関数つかわにゃできんな
string.hを追加インクルード
コード:
char name[30];
//strcpy( char *,char * );
strcpy( name,func() );
printf( 省略,name );
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 12:07
by rozeo
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 12:08
by 初級者
strcpyに、謎の第3引数が...
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 12:11
by rozeo
初級者 さんが書きました:strcpyに、謎の第3引数が...
いろいろ混同しちゃってるな
修正済み
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 12:14
by usao
オフトピック
コード:
struct seiseki{
char name[30];
int score;
}; //←セミコロン付ける
//プロトタイプ宣言
int fanc( const struct seiseki *pList ); //※funcの綴り間違い?
//
int main( void )
{
struct seiseki list[] = { ... };
printf( "...%s", list[ fanc(list) ].name );
return 0;
}
//
int fanc( const struct seiseki *pList )
{
...
return 「引数リストの中で,2番目にscoreの値が大きい要素のindex」
}
こういう形にすれば,
>文字列の扱い
という,(混乱を生みそうな面倒な)要素をこの場に導入せずに済むのではないでしょうか.
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 19:30
by softya(ソフト屋)
>> rozeo さん。
掲示板では基本的に丁寧語でお願いします。
フォーラムルールにも書いてありますが、もめる原因となる恐れがあります。
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月02日(月) 20:47
by rozeo
softya(ソフト屋) さんが書きました:>> rozeo さん。
掲示板では基本的に丁寧語でお願いします。
フォーラムルールにも書いてありますが、もめる原因となる恐れがあります。
了解です。すいません。
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月03日(火) 00:19
by kenta
皆様多くの回答ありがとうございます。
一応修正してみたのですが、今度は14行目のfuncの識別子が見つからないとエラーになります。
どうしてでしょうか?
コード:
#include"stdafx.h"
struct seiseki{
char name[30];
int score;
};
int main()
{
int e;
struct seiseki list[]={{"sato",80},
{"suzuki",75},
{"tanaka",95},
{"takahashi",90}};
e=fanc(list);
printf("2番目に点数が高い人は%s\n",list[e].name);
}
int fanc(struct seiseki *list)
{
int i,k,d,top1=0,top2=0;
for(i=0;i<4;i++)
{
if(top1<list[i].score)
{
if(top2<top1)
{
top2=top1;
d=k;
}
k=i;
top1=list[i].score;
}
}
return(d);
}
Re: 戻り値の型と関数の型が一致しません。
Posted: 2014年6月03日(火) 00:25
by みけCAT
funcではなくfancですよね。
main関数より前の行で、プロトタイプ宣言
コード:
int fanc(struct seiseki *list);
を書いてください。
今回はstruct seisekiも使うので、6行目と7行目の間に入れるのがいいと思います。