• 締切済み

変数の定義もれ?

稚拙なEAをつくってみました。変数が定義されていない箇所が一か所あるというエラーメッセージがでます。売りポジションのストップロスあたりのようなのですが、どこかわかりません。どなたかよろしくお願いいたします。(安易に聞くなと怒られそうですが、3日考えてもわかりません。よろしくお願いします。) ?????????????????????????????????????????????????????????????????????????? //パラメーターの設定// extern double Lots = 1.0; //取引ロット数 extern int Slip = 10; //許容スリッページ数 extern string Comments = ""; //コメント extern int TP =20 ; //利益確定ポイント数 extern int SL =15 ; //ストップロスポイント数 //変数の設定// int Ticket_L = 0; //買い注文の結果をキャッチする変数 int Ticket_S = 0; //売り注文の結果をキャッチする変数 int Exit_L = 0; //買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; //売りポジションの決済注文の結果をキャッチする変数 double st_2_60 = 0; //60分足の2本前のバーのストキャスティクス double st_1_60 = 0; //60分足の1本前のバーのストキャスティクス double st_2_15 =0; //15分足の2本前のバーのストキャスティクス double st_1_15 =0; //15分足の1本前のバーのストキャスティクス double signal_2_60 =0; //60分足の2本前のバーのシグナル double signal_1_60 =0; //60分足の1本前のバーのシグナル double signal_2_15= 0; //15分足の2本前のバーのシグナル double signal_1_15= 0; //15分足の1本前のバーのシグナル int start() { st_2_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,0,2); st_1_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,0,1); st_2_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,0,2); st_1_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,0,1); signal_2_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,1,2); signal_1_60=iCustom(NULL,60,"Stochastic",5,3,3,0,100,1,1); signal_2_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,1,2); signal_1_15=iCustom(NULL,15,"Stochastic",5,3,3,0,100,1,1); //買いポジションの利益確定 OrderSelect(Ticket_L,SELECT_BY_TICKET); if( (OrderOpenPrice()+TP*Point<=Bid) &&(Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } //売りポジションの利益確定 OrderSelect(Ticket_S,SELECT_BY_TICKET); if( (OrderOpenPrice()-TP*Point>=Ask) &&(Ticket_S!= 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S==1 ) {Ticket_S = 0;} } //買いポジションのストップロス OrderSelect(Ticket_L,SELECT_BY_TICKET); if( (OrderOpenPrice()-SL*Point>=Bid) &&(Ticket_L!=0 && Ticket_L!=-1)) { Exit_L=OrderClose(Ticket_L,Lots,Bid,Slip,Red); if(Exit_L==1){Ticket_L=0;}   //売りポジションのストップロス OrderSelect(Ticket_S,SELECT_BY_TICKET); if( (OrderOpenPrice()+SL*Point<=Ask) &&(Ticket_S != 0 && Ticket_S != -1)) { Exit_S=OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if(Exit_S==1){Ticket_S=0;} //買いポジションのエグジット if( st_1_15 <= 25 && Ticket_L != 0 && Ticket_L != -1) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } //売りポジションのエグジット if( st_1_15 >=75 && Ticket_S != 0 && Ticket_S != -1 ) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } //買いエントリー if( st_2_60 > 20 && st_1_60 > st_2_60 && st_1_60 < 70 && st_2_15 > 20 && st_1_15 > st_2_15 && st_1_15 < 70 && st_1_15 >= signal_1_15 && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } //売りエントリー if( st_2_60 < 80 && st_1_60 < st_2_60 && st_1_60 >30 && st_2_15 < 80 && st_1_15 <= st_2_15 && st_1_15 <= signal_1_15 && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); } // the end.

みんなの回答

  • fhat6014
  • ベストアンサー率94% (34/36)
回答No.1

//売りポジションのストップロス の前にあるスペースを消してみてください。 たぶん全角スペースが含まれています。

hideboo-
質問者

お礼

ありがとうございます。 やってみました。ご指摘の通り、全角になっていたようです。 ところが、今度は別のエラーメッセージが出てきてしまいました。 文末に「 } 」が期待されるというメッセージが出るのですが、これについても私では見当がつきません。 (そもそも、質問した後で変更を加えていませんので、なぜ今?という感じなのですが、無意識に変更してしまったのでしょうか。) ご指摘いただけましたらありがたいです。よろしくお願いいたします。

hideboo-
質問者

補足

fhat6014様、みなさま お騒がせいたしました。 理解できないながら、}を付けたり削ったりしていましたら、なんとかエラーがなくなりました。 最後の行にもうひとつ}が足りなかったようです。なぜそうなのか、これから考えてみます。 ありがとうございました。

関連するQ&A

  • MT4のEAがエントリーしません

    上向きの移動平均線をローソク足が下から抜けたら買いエントリーし、4本値すべて移動平均線の下にいったらイグジット、売りは逆というEAをiCutomの本を見ながら作ってみたのですが、ポンド円の一分足で半日稼働したけれど全くエントリーしませんでした。どこがわるいのでしょうか?宜しくお願いします。(以下が内容です)因みにコンパイルしてエラーはありませんでした。 // マジックナンバーの定義 #define MAGIC 5582 // パラメーターの設定// extern int MA_Period = 21; // 短期移動平均線の期間設定 extern int MA_Shift = 0; // 移動平均を右にシフトするバー数の設定 extern int MA_Method = 0; // 移動平均方法の設定 extern double Lots = 1.0; // 取引ロット数 extern int Slip = 100; // 許容スリッページ数 extern string Comments = " "; // コメント // 変数の設定// int Ticket_L = 0; // 買い注文の結果をキャッチする変数 int Ticket_S = 0; // 売り注文の結果をキャッチする変数 int Exit_L = 0; // 買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; // 売りポジションの決済注文の結果をキャッチする変数 double MA_2 = 0; double MA_1 = 0; int start() { MA_2 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,2); MA_1 = iCustom(NULL,0,"Moving Averages",MA_Period,MA_Shift,MA_Method,0,1); // 買いポジションのエグジット if( MA_1 >= High[1] && ( Ticket_L != 0 && Ticket_L != -1 )) { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if( Exit_L ==1 ) {Ticket_L = 0;} } // 売りポジションのエグジット if( MA_1 <= Low[1] && ( Ticket_S != 0 && Ticket_S != -1 )) { Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue); if( Exit_S ==1 ) {Ticket_S = 0;} } // 買いエントリー if( MA_2 <= MA_1 && MA_1 > Open[1]&& MA_1 > Close[1] && ( Ticket_L == 0 || Ticket_L == -1 ) && ( Ticket_S == 0 || Ticket_S == -1 )) { Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } // 売りエントリー if( MA_2 >= MA_1 && MA_1 < Open[1]&& MA_1 > Close[1] && ( Ticket_S == 0 || Ticket_S == -1 ) && ( Ticket_L == 0 || Ticket_L == -1 )) { Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }

  • MT4の勉強でつまりました

    前日の4本値とフィボナッチを利用して当日の売り買いを自動的に行なうプログラムを考えてみました。 しかし、書物を参考にしていることもあってか、うまくいきません。 仕事に出かける時間が早いので標準時間(夏;6:00 冬;7:00)にエントリーできません。 流れとして 標準時間にプログラムスタート→前日分を決済→計算式に基づいてエントリーする。 初心者に付き問題点をわかりやすくご指導ください。 //マジックナンバーの定義 #define MAGIC 7 //パラメーターの設定// extern double Lots = 1.0; //取引ロット数 extern int Slip = 10; //許容スリップページ数 extern string Comments = ""; //コメント //変数の設定// int Ticket_L = 0;//買い注文の結果をキャッチする変数 int Ticket_S = 0;//売り注文の結果をキャッチする変数 int Exit_L = 0; //買いポジションの決済注文の結果をキャッチする変数 int Exit_S = 0; //売りポジションの決済注文の結果をキャッチする変数 int start() { //買いポジションのエグジット { Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red); if(Exit_L == 1){Ticket_L =0;} } //売りポジションのエグジット { Exit_S = OrderClose(Ticket_S,Lots,Bid,Slip,Blue); if(Exit_S == 1){Ticket_S =0;} } //買いエントリー if(((iHigh("GBPJPY",1440,1)-iLow("GBPJPY",1440,1))*0.5+iLow("GBPJPY",1440,1))<((iOpen("GBPJPY",1440,1)+iClose("GBPJPY",1440,1))/2 { Ticket_L = OrderSend(Symbol(),OP_BUY, Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red); } //売りエントリー if(((iHigh("GBPJPY",1440,1)-iLow("GBPJPY",1440,1))*1.382+iLow("GBPJPY",1440,1))>((iOpen("GBPJPY",1440,1)+iClose("GBPJPY",1440,1))/2 { Ticket_L = OrderSend(Symbol(),OP_SELL, Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue); } return(0); }

  • fscanfで格納された変数がおかしいです。

    fscanfで格納された変数がおかしいです。 ダブルポインタで定義した変数にfscanfでファイルから文字列データを読み込んでいるのですが 表示がおかしな事になっています。 読み込んだファイルの内容は、 aiueo kakikueko sasisuseso tatituteto です。 表示された結果が kakikueko sasisuseso tatituteto kakisasitatituteto sasitatituteto tatituteto 自分では解決しずらいのでここで質問をさせて頂くことになりました。 C/C++で記述してあるのですが、以下にソースを載せておきますのでご指摘ください。 /* double pointa */ #include <stdio.h> #include <stdlib.h> #define MAXSIZE 256 char** size; // TEST void test(void) { for(int l = 0; l < 3; l++) { printf("\n%s", &size[l]); } } int main() { FILE* fp; int c = -1; char moji[MAXSIZE]; if((fp = fopen("test.txt","rb")) == NULL) { printf("error"); exit(1); } while(fscanf(fp,"%s",moji) != EOF) c++; size = (char**)malloc(sizeof(char) * MAXSIZE * c); // 初めに戻す fseek(fp, 0, SEEK_SET); // 最初の文だけ取り出す fscanf(fp,"%s",moji); // 一文を格納する for(int l = 0; fscanf(fp, "%s", &size[l]) != EOF; l++) { printf("\n%s", &size[l]); } printf("\n"); test(); fclose(fp); getchar(); free(size); return 0; } test関数内で表示するとおかしな結果がでるのですが何故かわかりません。 よろしくお願いします。

  • 初心者です。ポジションが上手く決済されません。

    FastMaとSlowMaのGC・DCでポジションを持ちSL・TPで決済したいのですが 反対のポジションを持ったときに決済してしまいます。 どこがダメなのでしょうか? 初歩的なことだと思いますが、一週間悩んでも分りませんでした。 よろしくお願いします。 //| パラメーター extern int FastMA_Period = 4; extern int SlowMA_Period = 8; extern double Lots = 0.1; extern int Slippage = 3; extern int SLpips = 150; // 損切り値幅(pips) extern int TPpips = 80; // 利食い値幅(pips) //| ポジションを決済する void ClosePositions() { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break; if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue; //オーダータイプのチェック if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White); break; } if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White); break; } } } //| スタート関数 int start() { //バーの始値でトレード可能かチェック if(Volume[0]>1 || IsTradeAllowed()==false) return(0); //移動平均の計算 double FastMA1 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,1); double SlowMA1 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,1); double FastMA2 = iMA(NULL,0,FastMA_Period,0,MODE_SMA,PRICE_CLOSE,2); double SlowMA2 = iMA(NULL,0,SlowMA_Period,0,MODE_SMA,PRICE_CLOSE,2); //買いシグナル if(FastMA2 <= SlowMA2 && FastMA1 > SlowMA1) { ClosePositions(); OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,0,"",MAGIC,0,Blue); return(0); } //売りシグナル if(FastMA2 >= SlowMA2 && FastMA1 < SlowMA1) { ClosePositions(); OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,0,"",MAGIC,0,Red); return(0); } return(0); }

  • シェルでのパイプの処理の書き方で困ってます

    現段階でのプログラムを載せます (質問に必要な部分を抜粋) #include "自作のヘッダファイル(動作確認済)" void tokun ( char str[], char *chops[], int *flagment , int *pipeflagment, int *pipe, int *num){ char *buf; int i; *pipeflagment = 0; buf = str; for(i=0; i <= SIZE ; i++){ if((chops[i] = strtok(buf," \t")) == NULL) break; if( *chops[i] == '|' ){ *pipeflagment = 1; *pipe = i + 1; *num = i; } buf = NULL; } if( *chops[i-1] == '&' ){ *flagment = BACK; chops[i-1] = NULL; i--; printf("**Background Mode**\n"); }else{ *flagment = FORE; printf("**Foreground Mode**\n"); } if(i > SIZE){ fprintf(stderr,"Too many args\n"); exit(1); } } int main ( void ){ char prompt[ 64 ] = "> "; char command[ 256 ]; int st, id, j, pipenum, num; char *com[256]; enum proc_flag flag; int pipeflag ; int out; int pipe_fd[2]; int child, status; char *buf; pipeflag = 0; fprintf(stderr, "%s", prompt); while (gets(command) != NULL){ if( command == "quit" ){ kill(0, SIGKILL); } buf = command; tokun(command, com, &flag, &pipeflag, &pipenum, &num); //pipe部分の記述開始 if( pipeflag == 1){ com[num] = NULL; if(pipe(pipe_fd) < 0){ perror("pipe"); exit(1); } if((child = fork()) < 0){ perror("fork"); exit(1); } if(child) { /* parent process */ close(pipe_fd[1]); dup2(pipe_fd[0], STDIN); execvp (com[pipenum], com); close(pipe_fd[0]); if(wait(&status) < 0){ perror("wait"); exit(1); } }else { /* child process */ close(pipe_fd[0]); dup2(pipe_fd[1], STDOUT); execvp (com[0], com); // 通信の終了を子プロセスに通知 close(pipe_fd[1]); } } //pipe部分の記述終了 if((id = fork ()) == 0){ if( execvp(com[0], com) == (-1)){ exit(1); } }else { if( flag == BACK ){ waitpid(-1, NULL, WNOHANG); fprintf(stderr, "%s", prompt); }else { wait(&st); fprintf(stderr, "%s", prompt); } } } return 0; } パイプ部分が作れません・・・。 どうすればいいですか?

  • 【MQL4】ZigZagの天底の値の取得

    最近MT4の入門書を買ってMQL4の勉強を始めた者です。よろしくお願いします。 EAでZigZagの天底を現在レートがブレイクアウトしたところでエントリーするシステムを作りたいのですが、ZigZagの頂点(底点)の値の取得の仕方がわかりません。 iCustomで標準搭載のZigZagを呼び出して条件式を書いてみましたが売買できませんでした。 (以下のような文です) double zig = iCustom(NULL, 0,"ZigZag",12,5,3,0,0); if(zig <Ask) { OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",0,0,Blue); } おそらく見当違いのことをしているのだとは思います。 私が知りたいことは以下の2点です。 1.一つ前のZigZagの頂点(底点)の値。 2.二つ前のZigZagの頂点(底点)の値。 どうかよろしくお願い致します。

  • 2回目のエントリーで時間通りにクローズ出来ない

    以前の質問内容からパラメーターをコピーし_2にしてからstart関数内に 同じようにコピーしましたが、2回目のエントリーの後、時間通りに決済ができません。 どなたか対策案教えてください。ここまでできるようになりましたが本当に困っております。 ----------------------------- int start() { if(OrdersTotal() == 0){ if((TimeHour(TimeCurrent()) == OrderHour || CheckOrderHour == false)&&(TimeMinute(TimeCurrent()) == OrderMinute || CheckOrderMinute == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds || CheckOrderSeconds == false)) { if(Cmd == OP_BUY){ OrderSend(Symbol(),Cmd,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Red); return(0); } if(Cmd == OP_SELL){ OrderSend(Symbol(),Cmd,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Blue); return(0); } } } if((TimeHour(TimeCurrent()) == CloseHour || CheckCloseHour == false)&&(TimeMinute(TimeCurrent()) == CloseMinute || CheckCloseMinute == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds || CheckCloseSeconds == false)) { for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Lime); return(0); } } } } if(OrdersTotal() == 0){ if((TimeHour(TimeCurrent()) == OrderHour_2 || CheckOrderHour_2 == false)&&(TimeMinute(TimeCurrent()) == OrderMinute_2 || CheckOrderMinute_2 == false) &&(TimeSeconds(TimeCurrent()) == OrderSeconds_2 || CheckOrderSeconds_2 == false)) { if(Cmd_2 == OP_BUY){ OrderSend(Symbol(),Cmd_2,Lots_2,Ask,Slippage_2,Ask-StopLoss_2*Point,Ask+TakeProfit_2*Point,"",MagicNumber_2,0,Red); return(0); { if(Cmd_2 == OP_SELL){ OrderSend(Symbol(),Cmd_2,Lots_2,Bid,Slippage_2,Bid+StopLoss_2*Point,Bid-TakeProfit_2*Point,"",MagicNumber_2,0,Blue); return(0); } } } if((TimeHour(TimeCurrent()) == CloseHour_2 || CheckCloseHour_2 == false)&&(TimeMinute(TimeCurrent()) == CloseMinute_2 || CheckCloseMinute_2 == false)&&(TimeSeconds(TimeCurrent()) == CloseSeconds_2 || CheckCloseSeconds_2 == false)) { for(int s = 0; s < OrdersTotal(); s++) { if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES) == false) { break; } if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_2) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,Slippage_2,Yellow); return(0); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,Slippage_2,Lime); return(0); } } } } return(0); } } }

  • 有限体GF(4)上の同次方程式で不定方程式

    連立方程式の解法ですが、手計算だとうまくいくのにプログラムにしようとするとうまくいきません。 さらに不定方程式なので解がないといわれてしまいます。誰かわかる方がいらしたらプログラムを 見て直していただきたいです。プログラムは以下の通り。 #define N 4 #define T 6 unsigned char gf[4]={0,1,2,3},fg[4]={0,1,2,3}; unsigned char gf[4]={0,1,2,3},fg[4]={0,1,2,3}; unsigned char ad[4][4]; /* 答えは 1,1,2 */ unsigned char s[3][3]={{1,3,1},{3,3,0},{1,0,3}}; /* 答えはzを不定として1と置き、x=z=1;y=0;になる筈だがならない */ //unsigned char s[][]={{2,2,2},{2,0,2},{2,2,2}} int add(int x,int y){ return ad[x][y]; } int mlt(int x, int y){ if(x==0||y==0) return 0; return ((x+y-2)%(N-1))+1; } int mltn(int n,int x){ int i,j; if(n==0) return 1; i=x; for(j=0;j<n-1;j++) i=mlt(i,x); return i; } int div(int x,int y){ if(x==0) return 0; return ((x-y+(N-1))%(N-1))+1; } void syn(){ int i,j,k,l,n; for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(i==j){ if(s[i][j]==1){ for(l=0;l<3;l++){ for(k=0;k<3;k++){ s[l+1][k]=add(s[l+1][k],mlt(s[l+1][k],s[i][k])); printf("%d ",s[l][k]); } printf("\n"); } } // exit(1); if(s[i][j]!=1){ printf("%da \n",s[i][j]); n=div(1,s[i][j]); if(n==0){ printf("%d =\n",fg[s[i][j]]); exit(1); } for(k=0;k<3;k++){ if(s[0][0]==0){printf("%d?\n",s[0][0]); exit(1);} s[i][k]=mlt(n,s[i][k]); printf("%d ",s[i][k]); } printf("\n"); for(l=i;l<3;l++){ for(k=0;k<3;k++){ s[l+1][k]=add(s[l+1][k],mlt(s[l+1][k],s[i][k])); // printf("%d ",s[l][k]); } printf("\n"); } printf("\n"); for(l=0;l<3;l++){ for(k=0;k<3;k++) printf("%d ",s[l][k]); printf("\n"); } // exit(1); if(s[i][j]==0){ while(s[i][j]==0){ j++; } printf("i-j==%d\n",s[i+1][j]); if(s[i][j]!=0){ if(s[i][j]==1){ for(l=0;l<3;l++){ for(k=0;k<3;k++){ s[l+1][k]=add(s[l+1][k],mlt(s[l+1][k],s[i][k])); printf("%d ",s[l][k]); } printf("\n"); } } // exit(1); if(s[i][j]!=1){ printf("%da \n",s[i][j]); n=div(1,s[i][j]); if(n==0){ printf("%d =\n",fg[s[i][j]]); exit(1); } for(k=0;k<3;k++){ if(s[0][0]==0){printf("%d?\n",s[0][0]); exit(1);} s[i][k]=mlt(n,s[i][k]); printf("%d ",s[i][k]); } printf("\n"); for(l=i;l<3;l++){ for(k=0;k<3;k++){ s[l+1][k]=add(s[l+1][k],mlt(s[l+1][k],s[i][k])); // printf("%d ",s[l][k]); } printf("\n"); } printf("\n"); for(l=0;l<3;l++){ for(k=0;k<3;k++) printf("%d ",s[l][k]); printf("\n"); } }} // i++;j++; //exit(1); } } } } } for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%2d ",s[i][j]); printf("\n"); } } int main(){ int i,j; for(i=0;i<N;i++){ for(j=0;j<N;j++) ad[i][j]=fg[gf[i]^gf[j]]; } syn(); }

  • sys/types.hの必要性について

    #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> int main (int argc,char *argv[]) { struct stat buf[2],*p;     if(argc!=3) { fprintf(stderr,"Usage:newer file1 file2\n"); exit(EXIT_FAILURE); } p=buf; if(stat(argv[1],p)<0) { perror("stat"); exit(EXIT_FAILURE); } p++; if(stat(argv[2],p)<0) { perror("stat"); exit(EXIT_FAILURE); } if(buf[0].st_mtime>buf[1].st_mtime) { printf("%s\n",argv[1]); } else { printf("%s\n",argv[2]); } return EXIT_SUCCESS; } 上記のプログラムでは<sys/types.h>を使っていますが、 どこの部分で必要になるのでしょうか? プログラム貼り付けて非常に見づらくてすいません

  • [C言語]トラバースするプログラム(linux)

    linux(ubuntu11.04)でコマンドラインからもらったディレクトリをトラバースするプログラムを作りたいんですがうまくいきません。 一応書けたのですがどうも予想と違う動きをしてしまいます。 #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<dirent.h> #include<string.h> static void do_traverse(char *patht, int t); int main(int argc, char *argv[]) { int i; if(argc<2) { fprintf(stderr,"%s: no arguments\n",argv[0]); exit(1); } for(i=1;i<argc;i++) { do_traverse(argv[i],0); } return 0; } static void do_traverse(char *path, int t) { DIR *d; struct dirent *ent; int i; d=opendir(path); if(!d) { perror(path); exit(1); } while((ent=readdir(d))!=NULL) { struct stat st; if(lstat(ent->d_name,&st)<0) { perror(ent->d_name); exit(1); } for(i=0;i<t;i++) { printf(" "); } printf("%s\n",ent->d_name); if((strcmp(".",ent->d_name))==0 || (strcmp("..",ent->d_name))==0 || S_ISLNK(st.st_mode)) { continue; } if(S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode)) { do_traverse(ent->d_name,t+1); } } closedir(d); } 例えばディレクトリaにファイルbとディレクトリcがあり、ディレクトリcの中にはファイルdとディレクトリeがあり、ディレクトリeの中にはファイルfがあるとします。 僕の理想では $./traverse a とすると .. . b c .. . d e .. . f となるはずなんですが(表示の順番は適当です)、実際は b .. . c となってしまいうまくトラバースしてくれません どうしてこうなるかわかりません 誰か助けてください お願いします