dポイントプレゼントキャンペーン実施中!

#include <stdio.h>

int bonus(int year,char rank);

main()
{
int a;
char s[2];

while(1)
{
printf("勤続年数:");
scanf("%d",&a);
printf("ランク:");
scanf("%s",s);

if(bonus(a,s[0])==-1){
exit(1);
}
if(bonus(a,s[0])==0){
printf("入力エラー\n");
}
printf("ボーナス支給額=%d\n",bonus(a,s[0]));
}
}
int bonus(int year,char rank)
{
int bonus;

if(strcmp(rank,'a')==0)
if(year<=5)
bonus=80000*2.3+80000*3+10000;
else if(year<=10)
bonus=100000*2.3+100000*3+12000;
else if(year<=15)
bonus=120000*2.3+120000*3+15000;
else if(year>=16)
bonus=150000*2.3+150000*3+18000;
else
return -1;

else if(strcmp(rank,'e')==0)
return -1;
else
return -1;

return bonus;
}

勤続年数とランクを入力したらボーナス支給額を表示させるというプログラムです。
ランクがA,B,C,Dとありましたが、800字以上になるので省略しました。


とりあえずコンパイルできたものの、実行してランクを入力したらエラーが出て終了してしまいます。
そのエラーの原因がわかりません。

多分メモリーら辺がおかしいみたいなんですけど・・・。

よろしくお願いします。

A 回答 (4件)

ここですかね。


>if(strcmp(rank,'a')==0)

strcmpは、文字列の比較です。文字の比較はできません。

if(rank == 'a')

これでかまいません。


#bonus()をcallし過ぎなのは置いといて・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
解決しました。

計算部分があまりよくないのでもっと簡潔に計算させるように考え直してみようと思います。

お礼日時:2003/08/30 13:16

#3です。



失礼しました。ボーナス支給額は出るようです。
    • good
    • 0
この回答へのお礼

表示はされますが、計算処理をもっと簡潔にするために考え直してみようと思います。

お礼日時:2003/08/30 13:22

コンパイルエラーはお二方のおっしゃるとおりではないかと思われます。



しかしコンパイルが通っても「ボーナス支給額」の表示が
出ないままプログラムが終わってしまうように見受けられます。

while(1)内で使用されているexit(1)を別のに置き換えましょう。
    • good
    • 0

taka_tetsu さんが正解のようですね。



#include <string.h> を入れてみてください。
strcmpの行でエラーがでますね。
ワーニングで済んでも、文字定数をポインタに変換できないので、とんでもないメモリをアクセスしに行くので、エラーが起きます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

エラーの解説ありがとうございました。

お礼日時:2003/08/30 13:16

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