prophetok の回答履歴

全92件中1~20件表示
  • for文でline.substring(x,y)を繰り返す

    Java初心者のため、 質問内容も上手く書けていないと思いますが、分かる方がいらっしゃいましたらご教授願います。 ・桁数の多い数字が書かれているファイルがある ・そのファイルのx桁目からy桁目を抽出したい ・次はx+10桁目からy+10桁目を抽出 ・次はx+20桁目,y+20桁目…これを10回繰り返したい int x = 1;//最初は1桁目から int y = 10;//10桁目まで for(i = 0,i <= 10,i++){ //10回繰り返す i = i; String a = line.substring(x,y); int b =Integer.parseInt(a); x = x+10; y = y+10; } 【エラーメッセージ】 Exception in thread"main"java.lang.WStringIndexOutOfBoundsException:String index out of range: このエラーを修正するには、どすればいいのでしょうか?

    • ベストアンサー
    • waka-a
    • Java
    • 回答数2
  • 特定の文字を消去する方法

    ディレクトリの中の、例えば音声(*.ad)の一覧を作成するときに [ls *.ad > music.list] とすると、音声 1.ad ~ 10.ad が入っている場合music.listの内容は 1.ad 2.ad 3.ad 4.ad 5.ad 6.ad 7.ad 8.ad 9.ad 10.ad となるのですが、この[.ad]を削除してmusic.listの内容を 1 2 3 4 5 6 7 8 9 10 というふうにするにはどのようなコマンドを使えばいいのでしょうか? 大学の研究でこういった作業をする必要があり、数が少なければ手作業で[.ad]を消せばいいのですが数が膨大で手間がかかります。 どなたかご存知でしたら、お教えください。

  • C言語のプログラムについて

    大学のテストの確認をしているのですが、この問題の回答がどうしても分かりません。どなたか教えてください。 9桁以内の整数を入力し、int型の変数に格納し表示するプログラムを作成しなさい。 ただし、先頭は、数字か「+」か「-」とし、それ以外はすべて数字とする。この条件に合わないものおよび10桁以上のものは、「入力エラー」として表示後、再入力を行うこと。 例えば「-123456」や「45678989」は、整数としてint型の変数に格納し、「abcd」や「123-234」は、「入力エラー 」を表示し、再入力を行う。 ---------------------------------------------------------------- また、自動判定の都合上、表示は以下の表示例に準拠すること。 【 23-234 *12345 -123456 を入力した例】 入力エラー 入力エラー 整数は、-123456 です。 お願いします

  • OpenCV webカメラ歪み補正

    こちらのHP(http://opencv.jp/sample/camera_calibration.html)の上から二番目の「キャリブレーションデータを利用して,歪みを補正する」プログラムがうまくいきません。 opencv - Microsoft Visual Studio 2005でデバッグをしたのですが、何も起こりませんでした。エラーも表示されないので行き詰ってしまいました。 以前質問したときに、「補正対象画像をコマンドライン引数で指定するプログラムなのでコマンドプロンプトから実行する」と回答をいただきましたが、よくわかりませんでした。 ちなみに"camera.xml"のファイルはサイトの一番上のプログラムで作成済みです。 この症状で考えられる原因はなんでしょうか? 回答よろしくお願いします。

  • 大学の授業で作った暗号化プログラムが動きません。

    下記のような暗号化プログラムを作成したのですが動きません。 問題のある場所は36行目(/で囲まれた行)で式の構文エラーと診断されたのですが、どう直せばいいのか分かりません。 どなたかどうすればよいのかお教え下さい。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int anngou (int c, char b[81]) { while (c <= 81) { if(b[c] >= 'a' && b[c] <= 'z') { if(b[c] >= 'a' && b[c] <= 'm') { b[c] = b[c] + 13; } else { b[c] = b[c] - 13; } } else { if(b[c] >= 'A' && b[c] <= 'Z') { if(b[c] >= 'A' && b[c] <= 'M') { b[c] = b[c] + 13; }else{ b[c] = b[c] - 13; } } } } return b[c]; } int main(void) { int a, c; char b[81]; a = c = 0; while (a <= 9) { printf("Input some words: "); fgets(b, 81, stdin); /b[c] = anngou(char b[c]);/ c = 0; while (c <= 81) { printf("%s", b[c]); c++; } printf("\n"); a++; } exit(0); }

  • ポインタの指しているアドレスは同じなのに表示される内容が違う。

    行列に関するプログラムです。 ライブラリのヘッダファイル matrix.h #ifndef MATRIX_H #define MATRIX_H #ifdef __cplusplus extern "C"{ #endif typedef struct{ int row,col; double *elements; } MATRIX; extern int matrix_error_code; extern MATRIX zero_matrix(MATRIX a); extern MATRIX identity_matrix(MATRIX a); extern void func_matrix(MATRIX a); #ifdef __cplusplus } #endif #endif ライブラリのソースファイル matrix.c #include <stdio.h> #include <stdlib.h> #include <math.h> #include "matrix.h" int matrix_error_code = 0; MATRIX zero_matrix(MATRIX a) /*零行列をつくる*/ { int i,size; double *p; size=a.row*a.col; for(i=0;i<size;i++) { if((p = malloc(sizeof(double))) == NULL) { puts("メモリを確保できません."); exit(0); } *p=0; } a.elements=p-size; return a; } MATRIX identity_matrix(MATRIX a) /*単位行列をつくる*/ { int i; a=zero_matrix(a); for(i=0;i<a.row;i++) { *(a.elements+i*a.col+i)=1.0000; } return a; } void func_matrix(MATRIX a) { int i,j; double *p; printf("b.elementsの値:%p\n",a.elements); printf("b[1,1]の値:%lf\n",a.elements); } 動作確認用のアプリケーションファイル test_matrix.c #include <stdio.h> #include "matrix.h" int main(void) { int i,j; MATRIX b; b.row=2; b.col=2; b=identity_matrix(b); for(i=0;i<b.row;i++) { for(j=0;j<b.col;j++) { printf("%3.4lf ",*(b.elements+i*b.col+j)); } printf("\n"); } printf("\n\n"); printf("b.elementsの値:%p\n",b.elements); printf("b[1,1]の値:%lf\n",b.elements); func_matrix(b); return 0; } void func_matrix(MATRIX a)内のprintf("b.elementsの値:%p\n",a.elements);とtest_matrix.c内のprintf("b.elementsの値:%p\n",b.elements);で表示される値は同じなので、main関数のbがvoid func_matrix(MATRIX a)内のaに正しく引き渡されていると思うのですが、それぞれの次の行での、printf("b[1,1]の値:%lf\n",b.elements);とprintf("b[1,1]の値:%lf\n",a.elements);とでは表示される値が違い、理由がわからず困っています。 どうか回答をよろしくお願いします。

  • ポインタの指しているアドレスは同じなのに表示される内容が違う。

    行列に関するプログラムです。 ライブラリのヘッダファイル matrix.h #ifndef MATRIX_H #define MATRIX_H #ifdef __cplusplus extern "C"{ #endif typedef struct{ int row,col; double *elements; } MATRIX; extern int matrix_error_code; extern MATRIX zero_matrix(MATRIX a); extern MATRIX identity_matrix(MATRIX a); extern void func_matrix(MATRIX a); #ifdef __cplusplus } #endif #endif ライブラリのソースファイル matrix.c #include <stdio.h> #include <stdlib.h> #include <math.h> #include "matrix.h" int matrix_error_code = 0; MATRIX zero_matrix(MATRIX a) /*零行列をつくる*/ { int i,size; double *p; size=a.row*a.col; for(i=0;i<size;i++) { if((p = malloc(sizeof(double))) == NULL) { puts("メモリを確保できません."); exit(0); } *p=0; } a.elements=p-size; return a; } MATRIX identity_matrix(MATRIX a) /*単位行列をつくる*/ { int i; a=zero_matrix(a); for(i=0;i<a.row;i++) { *(a.elements+i*a.col+i)=1.0000; } return a; } void func_matrix(MATRIX a) { int i,j; double *p; printf("b.elementsの値:%p\n",a.elements); printf("b[1,1]の値:%lf\n",a.elements); } 動作確認用のアプリケーションファイル test_matrix.c #include <stdio.h> #include "matrix.h" int main(void) { int i,j; MATRIX b; b.row=2; b.col=2; b=identity_matrix(b); for(i=0;i<b.row;i++) { for(j=0;j<b.col;j++) { printf("%3.4lf ",*(b.elements+i*b.col+j)); } printf("\n"); } printf("\n\n"); printf("b.elementsの値:%p\n",b.elements); printf("b[1,1]の値:%lf\n",b.elements); func_matrix(b); return 0; } void func_matrix(MATRIX a)内のprintf("b.elementsの値:%p\n",a.elements);とtest_matrix.c内のprintf("b.elementsの値:%p\n",b.elements);で表示される値は同じなので、main関数のbがvoid func_matrix(MATRIX a)内のaに正しく引き渡されていると思うのですが、それぞれの次の行での、printf("b[1,1]の値:%lf\n",b.elements);とprintf("b[1,1]の値:%lf\n",a.elements);とでは表示される値が違い、理由がわからず困っています。 どうか回答をよろしくお願いします。

  • ポインタの指しているアドレスは同じなのに表示される内容が違う。

    行列に関するプログラムです。 ライブラリのヘッダファイル matrix.h #ifndef MATRIX_H #define MATRIX_H #ifdef __cplusplus extern "C"{ #endif typedef struct{ int row,col; double *elements; } MATRIX; extern int matrix_error_code; extern MATRIX zero_matrix(MATRIX a); extern MATRIX identity_matrix(MATRIX a); extern void func_matrix(MATRIX a); #ifdef __cplusplus } #endif #endif ライブラリのソースファイル matrix.c #include <stdio.h> #include <stdlib.h> #include <math.h> #include "matrix.h" int matrix_error_code = 0; MATRIX zero_matrix(MATRIX a) /*零行列をつくる*/ { int i,size; double *p; size=a.row*a.col; for(i=0;i<size;i++) { if((p = malloc(sizeof(double))) == NULL) { puts("メモリを確保できません."); exit(0); } *p=0; } a.elements=p-size; return a; } MATRIX identity_matrix(MATRIX a) /*単位行列をつくる*/ { int i; a=zero_matrix(a); for(i=0;i<a.row;i++) { *(a.elements+i*a.col+i)=1.0000; } return a; } void func_matrix(MATRIX a) { int i,j; double *p; printf("b.elementsの値:%p\n",a.elements); printf("b[1,1]の値:%lf\n",a.elements); } 動作確認用のアプリケーションファイル test_matrix.c #include <stdio.h> #include "matrix.h" int main(void) { int i,j; MATRIX b; b.row=2; b.col=2; b=identity_matrix(b); for(i=0;i<b.row;i++) { for(j=0;j<b.col;j++) { printf("%3.4lf ",*(b.elements+i*b.col+j)); } printf("\n"); } printf("\n\n"); printf("b.elementsの値:%p\n",b.elements); printf("b[1,1]の値:%lf\n",b.elements); func_matrix(b); return 0; } void func_matrix(MATRIX a)内のprintf("b.elementsの値:%p\n",a.elements);とtest_matrix.c内のprintf("b.elementsの値:%p\n",b.elements);で表示される値は同じなので、main関数のbがvoid func_matrix(MATRIX a)内のaに正しく引き渡されていると思うのですが、それぞれの次の行での、printf("b[1,1]の値:%lf\n",b.elements);とprintf("b[1,1]の値:%lf\n",a.elements);とでは表示される値が違い、理由がわからず困っています。 どうか回答をよろしくお願いします。

  • 大量データの一括変換

    aaa.bbb ccc.ddd eee.fff ggg.hhh 上記のようなデータが約1万行程度あるのですが、これを下記のようなユーザ名・メルアドに変換するコマンド等、お分かりになる方教えてください。ユーザ名・メルアドの間は半角スペースです。 ある程度自分で調べた結果awk等で出来そうな気がするのですが。。。 ユーザ名  メルアド   ↓     ↓ aaa.bbb aaa.bbb@hoge.com ccc.ddd ccc.ddd@hoge.com eee.fff eee.fff@hoge.com ggg.hhh ggg.hhh@hoge.com

  • javaプログラミングで標準APIを用いたリストを作成したいのですが・・・

    タイトルの通り、リストで簡単な個人情報を管理するプログラムを作成しています。 「こんな機能を使うといいよ」とか、「こういう風にプログラムを組んだほうがいいよ」などのアドバイスがあれば書いて頂けると助かります。 プログラムの仕様は下記の通りです。 ・mainメソッドをもつクラスのファイル名はPersonalDataList.javaとする。 ・個人情報の管理はリストを使う。 ・登録できるデータ件数の制限はなしとする ・実装する機能 - 個人情報の追加…キーボードで入力された個人情報をリストに追加する - 個人情報の一覧表示…登録済みの個人情報を一覧表示する - 個人情報の削除…指定された番号の個人情報をリストから削除する - 個人情報をソート…登録済みの個人情報を、指定されたフィールド・順序(昇順・降順)にソートする - 個人情報の検索…登録済みのデータの中から、キーボードで入力された文字列を一致する名前の個人情報を全て表示する 取り扱う個人情報個人情報は以下の通りです。 [フィールド名]  [意味]   [データ型]    name 名前 String address 住所 String age 年齢 int telephone 電話番号 String また、これらの個人情報を扱うクラスとして"Person"というクラス名のクラスを用意します。 使用する標準APIに特に制限はありません。 現在私が考えているのは、以下の通りです。 ・リストはArrayListを使う ・キーボードからの入力する文字列はBufferReaderを用いる ・キーボードから入力した文字列を数値に変換するのに、Integer parseInt()を用いる プログラムを起動すると以下のようなメニューが表示される 1.個人情報の追加 2.個人情報の削除 3.個人情報の一覧表示 4.個人情報のソート 5.個人情報の検索 コマンドを入力して下さい>※←ここに各メニュー項目の番号を入力 1.個人情報の追加を選んだ場合、以下のメッセージを表示 個人情報を入力して下さい。 名前>※←ここに名前を入力してEnterキーを押すと下に進む。以下同様 住所>※ 年齢>※ 電話番号>※ 入力が完了したら、メニュー画面に戻る。 それぞれ正しく入力されなかった場合、エラーメッセージを表示しメニュー画面に戻る 2.個人情報の削除を選んだ場合、以下のメッセージを表示 削除したい個人情報の番号を入力して下さい >※←ここに番号を入力し、Enterキーを押すと指定した番号の個人情報が削除される 登録されている番号以外、または数値以外のものが入力された場合、エラーメッセージを表示してメニューに戻る 3.個人情報の一覧表示を選んだ場合、登録されている個人情報を全て一覧表示し、メニュー画面に戻る 4.個人情報のソートを選択した場合、以下のメッセージを表示 フィールドを選択して下さい。 1.名前 2.住所 3.年齢 4.電話番号 >※←ここに各メニュー項目に対応した数値を入力する 上記以外の数値、または数値以外が入力された場合はエラーメッセージを表示し、メニュー画面に戻る。 数値を入力し、Enterキーを押すと、以下のようにソートする順序を選択するメッセージが表示される ソート順序を入力して下さい 1.昇順 2.降順 >※←ここに数値を入力する 数値を入力し、Enterキーを入力するとメニュー画面に戻る。 上記以外の数値、または数値以外が入力された場合はエラーメッセージを表示し、メニュー画面に戻る。 5.個人情報の検索を選択した場合、以下のメッセージが表示される。 検索したい名前を入力してください。 >※←ここに名前を入力する 名前を入力し、Enterキーを押すと、入力した名前とリストに登録されている名前が一致した個人情報を全て一覧表示し、メニュー画面に戻る。 一致する名前が登録されていない場合、エラーメッセージを表示してメニュー画面に戻る。 以上が現在私が思い描いているものです。まだプログラムは組んでいません。 どうかご協力よろしくお願い致します。

  • VC++.NETを使用したRS232c通信プログラム

    RS232c通信をVC++.NETを用いてPSoCマイコンと通信を行うGUIを作成しようとしています。PSoCとハイパーターミナルを用いた送受信の通信は成功しました。そこで受信ボタンをクリックすると、PSoCから送られてくる文字列を受信してエディットコントロールに表示させるという、ダイアログボックスベースで作成したアプリケーションを作っているんですが、文字列をうまく受信してくれません.現状は「・・・」といった文字をエディットコントローラに表示しており、実際は「welcome」という文字列をPSoCより受信しなければならないんですが・・・。 RS232c通信用のAPIは以下のサイトより使わせてもらっています↓http://7ujm.net/C++/Rs232c.h.html 自分が作成したプログラムはボタンをクリックすることで発生するイベントハンドラ関数内に以下のプログラムを書いているだけです。↓ void CMy090630Dlg::OnBnClickedButton1() { RS232c rs; rs.Connect();//ポートcom5と接続を開始する char w[100]; rs.Read_CRLF(w,100);//PSoCより文字列を受信 m_edit1.SetWindowText(w);//エディットコントロールに  受信文字列を表示させる } VC++をはじめたばかりの初心者で、言葉の間違いなどあるかもしれませんが、教えてください。

  • VC++.NETを使用したRS232c通信プログラム

    RS232c通信をVC++.NETを用いてPSoCマイコンと通信を行うGUIを作成しようとしています。PSoCとハイパーターミナルを用いた送受信の通信は成功しました。そこで受信ボタンをクリックすると、PSoCから送られてくる文字列を受信してエディットコントロールに表示させるという、ダイアログボックスベースで作成したアプリケーションを作っているんですが、文字列をうまく受信してくれません.現状は「・・・」といった文字をエディットコントローラに表示しており、実際は「welcome」という文字列をPSoCより受信しなければならないんですが・・・。 RS232c通信用のAPIは以下のサイトより使わせてもらっています↓http://7ujm.net/C++/Rs232c.h.html 自分が作成したプログラムはボタンをクリックすることで発生するイベントハンドラ関数内に以下のプログラムを書いているだけです。↓ void CMy090630Dlg::OnBnClickedButton1() { RS232c rs; rs.Connect();//ポートcom5と接続を開始する char w[100]; rs.Read_CRLF(w,100);//PSoCより文字列を受信 m_edit1.SetWindowText(w);//エディットコントロールに  受信文字列を表示させる } VC++をはじめたばかりの初心者で、言葉の間違いなどあるかもしれませんが、教えてください。

  • VC++.NETを使用したRS232c通信プログラム

    RS232c通信をVC++.NETを用いてPSoCマイコンと通信を行うGUIを作成しようとしています。PSoCとハイパーターミナルを用いた送受信の通信は成功しました。そこで受信ボタンをクリックすると、PSoCから送られてくる文字列を受信してエディットコントロールに表示させるという、ダイアログボックスベースで作成したアプリケーションを作っているんですが、文字列をうまく受信してくれません.現状は「・・・」といった文字をエディットコントローラに表示しており、実際は「welcome」という文字列をPSoCより受信しなければならないんですが・・・。 RS232c通信用のAPIは以下のサイトより使わせてもらっています↓http://7ujm.net/C++/Rs232c.h.html 自分が作成したプログラムはボタンをクリックすることで発生するイベントハンドラ関数内に以下のプログラムを書いているだけです。↓ void CMy090630Dlg::OnBnClickedButton1() { RS232c rs; rs.Connect();//ポートcom5と接続を開始する char w[100]; rs.Read_CRLF(w,100);//PSoCより文字列を受信 m_edit1.SetWindowText(w);//エディットコントロールに  受信文字列を表示させる } VC++をはじめたばかりの初心者で、言葉の間違いなどあるかもしれませんが、教えてください。

  • 数値解析に関する質問です

    以下のプログラムでは、関数pivotは,3つの引数を利用しているが,これを2つに減らす方法はないか? 教えてください。よろしくお願いします。 /*Gaussian Elimination*/ #include <stdio.h> #include <math.h> /*--------------*/ void inputdata(double [3][4]); void calsol(double [3][4],double [3]); void elimination(double[3][4],double[3][4]); void pivot(int *, double [3][4],int *); void outputdata(double [3]); void checksol(double [3][4], double [3]); /*--------------*/ main(){ double c[3][4], x[3]; /*-----------------------*/ printf("Program of Gauss Elimination\n"); /*-----------------------*/ inputdata(c); /*-----------------------*/ calsol(c,x); /*-----------------------*/ outputdata(x); /*-----------------------*/ checksol(c,x); /*-----------------------*/ return(0); } /*-----------------------*/ void inputdata(double c[3][4]){ int ie,ic; printf("------\n"); printf("Input Data\n"); printf("(a0*x0 + a1*x1 +a2*x2 = a3)\n"); printf("\n"); for(ie=0; ie<=2; ie++){ printf("Equation %d\n",ie); printf("Input a0 a1 a2 a3\n"); for(ic=0;ic<=3;ic++){ scanf("%lf", &c[ie][ic]); } } } /*-----------------------*/ void calsol(double c[3][4], double x[3]){   double cc[3][4]; elimination(c,cc); x[2]=cc[2][3]; x[1]=cc[1][3]-cc[1][2]*x[2]; x[0]=cc[0][3]-cc[0][2]*x[2]-cc[0][1]*x[1]; } /*-----------------------*/ void elimination(double c3[3][4], double cc[3][4]){ int ie,imax,eli; double c2[3][4],c1[3][4]; eli = 0; pivot (&eli,c3,&imax); cc[0][0]=1; cc[0][1]=c3[imax][1]/c3[imax][0]; cc[0][2]=c3[imax][2]/c3[imax][0]; cc[0][3]=c3[imax][3]/c3[imax][0]; for(ie=0;ie<=2;ie++){ if(ie != imax){ c2[ie][0]=0; c2[ie][1]=c3[ie][1]-cc[0][1]*c3[ie][0]; c2[ie][2]=c3[ie][2]-cc[0][2]*c3[ie][0]; c2[ie][3]=c3[ie][3]-cc[0][3]*c3[ie][0]; } } eli = 1; pivot(&eli,c2,&imax); cc[1][1]=1; cc[1][2]=c2[imax][2]/c2[imax][1]; cc[1][3]=c2[imax][3]/c2[imax][1];   for(ie=0;ie<=1;ie++){ if(ie !=imax){ c1[0][2]=c2[ie][2]-cc[1][2]*c2[ie][1]; c1[0][3]=c2[ie][3]-cc[1][3]*c2[ie][1]; } } cc[2][2]=1; cc[2][3]=c1[0][3]/c1[0][2]; } /*-----------------------*/ void pivot(int *eli,double c[3][4],int *imax){ int ie; double cmax; if(*eli ==0){ cmax=0; for(ie=0;ie<=2;ie++){ if(fabs(c[ie][0])>cmax){ cmax=c[ie][0]; *imax=ie; } } } else{ cmax=0; for(ie=0;ie<=1;ie++){ if(fabs(c[ie][1])>cmax){ cmax=c[ie][1]; *imax=ie; } } } } /*-----------------------*/ void outputdata(double x[3]){ int i; printf("------\n"); printf("Solutions\n"); for(i=0;i<=2;i++){ printf("x%d=%14.6e\n",i,x[i]); } } /*-----------------------*/ void checksol(double check[3][4],double x[3]){ double crt,clt; int ie,ic; printf("------\n"); printf("Check Solutions\n"); printf("Left Term Right Term\n"); for(ie =0;ie<=2;ie++){ clt =0 ; for(ic=0;ic<=2;ic++){ clt = clt + check[ie][ic]*x[ic]; } crt = check[ie][3]; printf("%14.6e%14.6e\n",clt,crt); } }

  • 共用体について

    こんにちは。 質問させてください。 下記のプログラムをコンパイル、実行したところ、警告が出て自分の思った通りに動作しません。 #include <iostream> class hoge { public:   union   {     float _1,_2;     float _a,_b;     float ar[2];   };   hoge( float i, float j ); }; hoge::hoge( float i, float j )   : _1( i )   , _2( j ) { } void main() {     hoge huga( 0,1 );     std::cout << sizeof( hoge ) << std::endl;     std::cout << huga._1 << " : " << huga._2 << std::endl; } 警告の内容は 「warning C4608: 'hoge::_2' は既に初期化子リスト 'hoge::<unnamed-tag>::hoge::_1' 内の他の共用体メンバにより初期化されています。」 となり、このまま実行をかけると 8 1 : 1 という実行結果になってしまいます。 自分が期待した実行結果は 8 0 : 1 なのですが、どのようにUnionを使えば期待した通りに動きますでしょうか。 /* WindowsXP 32bit Professional Memory 2GB CPU Core2Duo 2.44GHz VisualStudio2005 AcademicEdition コンパイラの警告レベル4 */ ちなみにunionの部分を   union   {     struct     {       float _1,_2;     }     struct     {       float _a,_b;     }     float ar[2];   }; のように修正すると期待した通りに動くのですが警告レベル4のおかげで 「warning C4201: 非標準の拡張機能が使用されています : 無名の構造体または共用体です。」 という警告が出てしまいます。 警告レベルを下げることとpragmaで警告を抑制することはしたくないのですがどのようにコードを修正すれば期待した通りに動作しますでしょうか。 よろしくおねがいします。

  • 関数に値の代入 [C言語]

    C言語初心者です。関数とポインタについて勉強していたのですが、ふと関数の型を知りたくなってVC++で型を調べてみたんです。そしたら、void型で引数のない関数の型は void (__cdecl*)() となっていました。voidと__cdeclはわかります。 そしてこれ型に*が入ってるじゃないですか。ということは関数はポインタということになると思います。なので私はもしかしたら値の代入ができるのではないか、と思ったのです。早速、 f1=f2;(f1とf2は型と内容の同じ関数) や、 (*f1)=(*f2); としてポインタの中身や参照先の関数の実態の値を処理中に書き換えてみようとしました。ですが、多分そうなるとは思ったのですが、コンパイルエラーが出ました。 《エラーの内容》 error C2106:'=':左のオペランドが、左辺値になっていません。 warning C4550:式は引数リストのない関数として評価します。 関数を書き換えようとすること自体馬鹿げていることは重々承知です。でも、微かにいけそうな気がするんですよ。代入させたくないなら関数の型は一律constにすると思うし(実際関数をconstをつけて宣言してもOKだった、(プロトタイプ有り無しでも))、関数への代入は問答無用で駄目なのならばそういうエラーメッセージを出すと思うんです。 関数の書き換えは100%無理でしょうか?それとも関数を書き換える方法があるでしょうか?回答よろしくお願いします。

    • ベストアンサー
    • noname#113783
    • C・C++・C#
    • 回答数4
  • 単行リストのソートのプログラムについて

    単行リストのソースでわからなくなったので質問させていただきます。 #include<stdio.h> //---------------------------------------------------------- // InitBanpei // 番兵の初期化 //---------------------------------------------------------- // input: struct pNode* pNode //番兵のアドレス //---------------------------------------------------------- void InitBanpei(struct node* pStartNode,struct node* pEndNode); //---------------------------------------------------------- // IsBanpei // 番兵チェック //---------------------------------------------------------- // input: struct pNode* pNode //番兵のアドレス // out : true //成功 // false //失敗 //---------------------------------------------------------- int IsBanpei(struct node* pNode); //構造体 struct node { char name[30]; int kokugo; int suugaku; int eigo; int goukei; struct node* pNext; }; int main(void) { FILE* fp; struct node useStart,useEnd; struct node *p,*j,*max,*a; int stich=0; char work[256]; InitBanpei(&useStart,&useEnd); IsBanpei(&useStart); IsBanpei(&useEnd); fp=fopen("data.txt","r"); if(fp==NULL) { printf("ファイルを開けません\n"); return 0; } while(feof(fp)==0) { fgets(work,256,fp); stich++; } stich--; printf("%d\n",stich); if(stich==0) { printf("件数は0です\n"); return 0; } fclose(fp); fp=fopen("data.txt","r"); if(fp==NULL) { printf("ファイルを開けません\n"); return 0; } j=NULL; for(int i=0;i<stich;i++) { a=new struct node; if(a==NULL) { printf("メモリが確保できません\n"); return 0; } fscanf(fp,"%s %d %d %d ",&(a->name),&(a->kokugo),&(a->suugaku),&(a->eigo)); a->goukei=a->kokugo+a->suugaku+a->eigo; a->pNext=j; j=a; } useStart.pNext=j; max=&useStart; p=max->pNext; while(max->pNext!=NULL) { j=p; while(j->pNext!=NULL) { if(max->goukei< j->goukei) { max=j->pNext; p=j; } j=j->pNext; } p->pNext=max->pNext; max->pNext=useStart.pNext; max=max->pNext; } a=useStart.pNext; while(a->pNext!=NULL) { printf("%7s %03d %3d %3d %3d点\n ",a->name, a->kokugo,a->suugaku, a->eigo,a->goukei); a=a->pNext; } } //---------------------------------------------------------- // InitBanpei // 番兵の初期化 //---------------------------------------------------------- // input: struct pNode* pNode //番兵のアドレス //---------------------------- //------------------------------ void InitBanpei(struct node* pStartNode,struct node* pEndNode) { pStartNode->pNext=pEndNode; pEndNode->pNext=NULL; } //---------------------------------------------------------- // IsBanpei // 番兵チェック //---------------------------------------------------------- // input: struct pNode* pNode //番兵のアドレス // out : true //成功 // false //失敗 //---------------------------------------------------------- int IsBanpei(struct node* pNode) { if( pNode->pNext!=NULL) { return -1; } return 0; } のソースなのですが、単行リストを使って大きい順に並び替えをしたいのですがうまくできません。どこを直せばいいのでしょうか?分かる方いらしたらソースを書いてくださると助かります。

  • BMP画像を画像処理して連続に表示したいですが?

    プログラミングの初心者ですが、現在VC++2005のフォームアプリケーションでプログラムについて勉強しています。画像を連続表示するところで、わからなくなってしまったので、みなさんのご指導お願いいたします。 やりたい処理は、取り込んだ画像の色を変化させて、順番に表示したい 処理です。作成したプログラムは下記のようになります。 前略 for(n=0; n<256; n+=20){ for(y=0; y<480; y++){ for(x=0; y<640; x++){ bmp->Setpixel(x, y, Color::FromArgb(n, n, n)); } } pictureBox->Image = bmp; Thread::Sleep(2000); } nの値をbmpに入れてから一回表示し、さらにnを足してからbmpに入れて表示するといった流れですが、Sleepを入れても何にも表示されません。 どういったところは不具合なのかをよくわかりません。 ご指導をいただければ感謝致します。どうぞよろしくお願い致します。

  • BMP画像を画像処理して連続に表示したいですが?

    プログラミングの初心者ですが、現在VC++2005のフォームアプリケーションでプログラムについて勉強しています。画像を連続表示するところで、わからなくなってしまったので、みなさんのご指導お願いいたします。 やりたい処理は、取り込んだ画像の色を変化させて、順番に表示したい 処理です。作成したプログラムは下記のようになります。 前略 for(n=0; n<256; n+=20){ for(y=0; y<480; y++){ for(x=0; y<640; x++){ bmp->Setpixel(x, y, Color::FromArgb(n, n, n)); } } pictureBox->Image = bmp; Thread::Sleep(2000); } nの値をbmpに入れてから一回表示し、さらにnを足してからbmpに入れて表示するといった流れですが、Sleepを入れても何にも表示されません。 どういったところは不具合なのかをよくわかりません。 ご指導をいただければ感謝致します。どうぞよろしくお願い致します。

  • メインダイアログからの各ダイアログの呼び出し時に発生するエラーについて

    お世話になっています、fujitomoと申します。 現在、Visual C++のダイアログベースプログラムを作成しており、 メインダイアログから、各ダイアログ(計7つほど)にメッセージを送信したり、DoModal()で表示するために、メインダイアログのメンバ変数に各ダイアログのインスタンスを定義しました。 Ex) CSampleAClass A; CSampleBClass B; このように、定義し、いざメインダイアログからダイアログを呼び出そうとしたときに以下のようなメッセージのエラーが表示されました。 Unhandled exception at 0x40042c10 in Sample.exe: 0xC00000FD: Stack overflow. これはWindows CEのみのメッセージかもしれないのですが、たぶん言いたいことはスタックオーバーしてるよ、ということだと思います。 そこで、計7つのダイアログの定義を少なくして、6つにしたところ、上のエラーメッセージはでず、正常にダイアログが表示されました。 次にメンバ変数で各ダイアログのインスタンスを定義するのではなく、そのポインタを定義するようにプログラムを変更してみました。 Ex) CSampleAClass* A; CSampleBClass* B; このようにすると、計7つのダイアログをメンバ変数に定義してもエラーが発生せずに、正常にダイアログを表示させることが出来ました。 この理由はなぜでしょうか? C言語を始めて時間はたっているのですが、いまだにいまいちインスタンスのオブジェクトとそのポインタでの定義における違いがよく分かっていません。今回のことから、クラスをメンバ変数に定義するときはポインタで定義したほうがいいということなのでしょうか? ご参考となる意見がございましたら、ご意見宜しくお願い致します。 尚、開発環境は Windows CE 6.0 Visual Studio 2005 です。 宜しくお願い致します。