menuを自動生成するプログラム

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: menuを自動生成するプログラム

Re: menuを自動生成するプログラム

#5

by しょしんしゃ » 4年前

みけCAT さんが書きました:
4年前
mvprintw(3) manページ
mvprintw
mvprintw - man pages section 3: Curses Library Functions

mvprintfw関数の第一引数と第二引数はy, xの順番であるのに、
誤ってx, yの順番で座標を渡してしまっているのが原因であると考えられます。
オフトピック
x, yと書いているサイトもあるので、引っかかってしまったのかな…?
ncursesの使い方
治りました!間違ってるサイトにひっかかってました。ありがとうございます。

Re: menuを自動生成するプログラム

#4

by みけCAT » 4年前

mvprintw(3) manページ
mvprintw
mvprintw - man pages section 3: Curses Library Functions

mvprintfw関数の第一引数と第二引数はy, xの順番であるのに、
誤ってx, yの順番で座標を渡してしまっているのが原因であると考えられます。
オフトピック
x, yと書いているサイトもあるので、引っかかってしまったのかな…?
ncursesの使い方

Re: menuを自動生成するプログラム

#3

by しょしんしゃ » 4年前

みけCAT さんが書きました:
4年前
menu関数を呼び出す場所の前に、以下の例のようなmenu関数の宣言

コード:

int menu(int x, int y, int koumoku, char menu[][255]);
または定義が必要です。

また、提示されているgame_hedder.hは、インクルードが無限に再帰してしまうなどの問題があるため、
適切な内容に書き換えるか、本体からのインクルードを外す必要があります。
ありがとうございます!エラーが出ずにコンパイルできるようになりました!
いままで

コード:

int main(int,int,int,char);
って宣言してたのが駄目だったみたいです。。。

続けてで申し訳ないのですが新たな問題があって
->xxxxxx
-kkkk
のような感じで表示するために

コード:

    for(menu_number=0;menu_number<koumoku;menu_number++){
      if(select==menu_number){mvprintw(x,y+menu_number,"->%s",menu[menu_number]);}
      else {mvprintw(x,y+menu_number," -%s",menu[menu_number]);}
    }
という感じにしてみたのですが、実行すると
->kkkkxxx
のように重なって表示されてしまいます。
ncursesを使っていて、mvprintwのy座標をfor文で増やすことで表示する行をずらせません。
原因がわかれば教えてほしいです。よろしくお願いします。

Re: menuを自動生成するプログラム

#2

by みけCAT » 4年前

menu関数を呼び出す場所の前に、以下の例のようなmenu関数の宣言

コード:

int menu(int x, int y, int koumoku, char menu[][255]);
または定義が必要です。

また、提示されているgame_hedder.hは、インクルードが無限に再帰してしまうなどの問題があるため、
適切な内容に書き換えるか、本体からのインクルードを外す必要があります。

menuを自動生成するプログラム

#1

by しょしんしゃ » 4年前

->おやつ
・飯

みたいな感じのメニューを自動生成してくれる自作関数を作ってみたいと思ってますがエラーが出てしまってお手上げ状態です。。。
もともとwin10で使っていたものをlinuxに持って来て動くように直したつもりだったんですどエラーが出てしまった。。。

エラー内容
menu.c: 関数 ‘main’ 内:
menu.c:6:3: 警告: passing argument 4 番目の ‘menu’ の引数を渡すときにポインタからキャスト無しに整数を作成しています [デフォルトで有効]
x=menu(2,2,2,mainmenu);
^
In file included from menu.c:1:0:
game_hedder.h:7:5: 備考: expected ‘char’ but argument is of type ‘char (*)[255]’
int menu(int,int,int,char);
^
menu.c: トップレベル:
menu.c:10:5: エラー: ‘menu’ と型が競合しています
int menu(int x, int y, int koumoku, char menu[][255]){
^
In file included from menu.c:1:0:
game_hedder.h:7:5: 備考: 前の ‘menu’ の宣言はここです
int menu(int,int,int,char);
^


本体

コード:

#include"game_hedder.h"

main(){
  char mainmenu[2][255]={"oyatu","mesi"};
 int x;
  x=menu(2,2,2,mainmenu);
  printf("%d\n,x);
}

int menu(int x, int y, int koumoku, char menu[][255]){
  initscr();

//select 選択中の番号   0〜
//menu_number 項目番号 0〜
  int select=0, menu_number;

  while(1){
    for(menu_number=0;menu_number<koumoku;menu_number++){
      move(x,y+menu_number);
      if(select==menu_number) printw("->");
      else printw("・");

      printw(menu[menu_number]);
    }

    switch(getch()){
      case 'w':
        if(select!=0) select--;
        break;
      case 's':
        if(select!=koumoku-1) select++;
        break;
      case 'g':
        return select;
      default:
        break;
    }
  }
  endwin();
}

game_hedder.h

コード:

#include"game_hedder.h"

main(){
  char mainmenu[2][255]={"jyanken","osero"};

  menu(2,2,2,mainmenu);
}

ページトップ