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

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

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

#1

投稿記事 by kenta » 6年前

戻り値の型と関数の型が一致しないのですがなぜですか?
また、プログラムで間違っているとこがあればご指摘お願いします。

コード:

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

zxc
記事: 79
登録日時: 8年前
住所: 日本の背骨(?)あたり

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

#2

投稿記事 by zxc » 6年前

  エラーコードなりエラーの原因となる行が分かっているならそれを明示してください。
解決になるかは分かりませんが、fanc関数の戻り値型はvoidとなっているのにlist[d].nameをreturnしてはいけないと思います。

初級者
記事: 200
登録日時: 9年前

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

#3

投稿記事 by 初級者 » 6年前

main関数のprintfも、
%sに対応する変数がないので
間違いです。

kenta

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

#4

投稿記事 by kenta » 6年前

エラーとなっているのはreturn(list[d.name])です。
もし直すとしたらどのように直しを入れれば良いのでしょうか?
あと、このプログラムはまだ完成していなくて、出来るところまでやったものです。

rozeo
記事: 86
登録日時: 6年前
住所: 広島 呉 (学生寮
連絡を取る:

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

#5

投稿記事 by rozeo » 6年前

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 );
最後に編集したユーザー rozeo on 2014年6月02日(月) 12:10 [ 編集 1 回目 ]

rozeo
記事: 86
登録日時: 6年前
住所: 広島 呉 (学生寮
連絡を取る:

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

#6

投稿記事 by rozeo » 6年前

文字列の扱いはこのサイトがわかりやすいかもです
http://www.isl.ne.jp/pcsp/beginC/C_Language_11.html

初級者
記事: 200
登録日時: 9年前

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

#7

投稿記事 by 初級者 » 6年前

strcpyに、謎の第3引数が...

rozeo
記事: 86
登録日時: 6年前
住所: 広島 呉 (学生寮
連絡を取る:

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

#8

投稿記事 by rozeo » 6年前

初級者 さんが書きました:strcpyに、謎の第3引数が...
いろいろ混同しちゃってるな
修正済み

アバター
usao
記事: 1587
登録日時: 7年前

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

#9

投稿記事 by usao » 6年前

オフトピック

コード:

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」
}
こういう形にすれば,
>文字列の扱い
という,(混乱を生みそうな面倒な)要素をこの場に導入せずに済むのではないでしょうか.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#10

投稿記事 by softya(ソフト屋) » 6年前

>> rozeo さん。
掲示板では基本的に丁寧語でお願いします。
フォーラムルールにも書いてありますが、もめる原因となる恐れがあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

rozeo
記事: 86
登録日時: 6年前
住所: 広島 呉 (学生寮
連絡を取る:

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

#11

投稿記事 by rozeo » 6年前

softya(ソフト屋) さんが書きました:>> rozeo さん。
掲示板では基本的に丁寧語でお願いします。
フォーラムルールにも書いてありますが、もめる原因となる恐れがあります。
了解です。すいません。

kenta

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

#12

投稿記事 by kenta » 6年前

皆様多くの回答ありがとうございます。
一応修正してみたのですが、今度は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);
}

アバター
みけCAT
記事: 6284
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#13

投稿記事 by みけCAT » 6年前

funcではなくfancですよね。
main関数より前の行で、プロトタイプ宣言

コード:

int fanc(struct seiseki *list);
を書いてください。
今回はstruct seisekiも使うので、6行目と7行目の間に入れるのがいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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