• ベストアンサー

エラーの原因がわかりません。

#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字以上になるので省略しました。 とりあえずコンパイルできたものの、実行してランクを入力したらエラーが出て終了してしまいます。 そのエラーの原因がわかりません。 多分メモリーら辺がおかしいみたいなんですけど・・・。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

ここですかね。 >if(strcmp(rank,'a')==0) strcmpは、文字列の比較です。文字の比較はできません。 if(rank == 'a') これでかまいません。 #bonus()をcallし過ぎなのは置いといて・・・

usui323
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • V-bravo-U
  • ベストアンサー率51% (155/301)
回答No.4

#3です。 失礼しました。ボーナス支給額は出るようです。

usui323
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • V-bravo-U
  • ベストアンサー率51% (155/301)
回答No.3

コンパイルエラーはお二方のおっしゃるとおりではないかと思われます。 しかしコンパイルが通っても「ボーナス支給額」の表示が 出ないままプログラムが終わってしまうように見受けられます。 while(1)内で使用されているexit(1)を別のに置き換えましょう。

すると、全ての回答が全文表示されます。
  • gatyan
  • ベストアンサー率41% (160/385)
回答No.2

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

usui323
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A