ページ 11

戻り値の型と関数の型が一致しません。

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
文字列の扱いはこのサイトがわかりやすいかもです
http://www.isl.ne.jp/pcsp/beginC/C_Language_11.html

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行目の間に入れるのがいいと思います。