トップページ > 記事閲覧
ファイルから読み込んだデータが上手く代入できない
名前:ねこここ 日時: 2018/08/26 00:40

龍神録プログラミングの館さんのサイトの https://dixq.net/rp/11.html のページを参考にカンマ区切りのデータを読み込み、 構造体にそのデータを代入するプログラムを書いてみましたが、 ビルドでエラーが出てしまい、 解決方法がわからず行き詰ってしまったので教えてください。 touroku.datというデータ用のファイルを作り、 中身はカンマ区切りで以下のような感じになってます。 AAAAAAAAAAAAAAA,パンチ,777 BBBBBBBBBBBBBBB,キック,888 CCCCCCCCCCCCCCC,チョップ,999 全体のソースコードです。 #include "DxLib.h" // 構造体 typedef struct { char name[64]; // 名前(文字列で扱う) char wazamei[64]; // 技名(文字列で扱う) int type; // タイプ(数値で扱う) }touroku_data_t; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(true);//ウィンドウモード //ウィンドウサイズを変更する SetGraphMode(1024, 768, 32); // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) { return -1 ; // エラーが起きたら直ちに終了 } int n,num,i,fp; char fname[32]={"touroku.dat"}; int input[64]; char inputc[64]; // 構造体の要素をとりあえず100個作る touroku_data_t touroku_data[100]; fp = FileRead_open(fname);//ファイル読み込み if(fp == NULL){ printfDx("read error\n"); return; } n=0 , num=0; while(1){ for(i=0;i<64;i++){ inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する if(input[i]==',' || input[i]=='\n'){//カンマか改行なら inputc[i]='\0'; //そこまでを文字列とし break; } if(input[i]==EOF){//ファイルの終わりなら goto EXFILE;//終了 } } switch(num){ case 0: touroku_data[n].name=inputc;break; case 1: touroku_data[n].wazamei=inputc;break; case 2: touroku_data[n].type=atoi(inputc);break; } num++; if(num==3){ num=0; n++; } } EXFILE: FileRead_close(fp); // ちゃんと代入されているか表示 for(int i=0;i<n;i++){ printfDx("名前:%s\n",touroku_data[i].name); printfDx("技名:%s\n",touroku_data[i].wazamei); printfDx("タイプ:%d\n",touroku_data[i].type); } WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; } ビルドすると、 case 0: touroku_data[n].name=inputc;break; case 1: touroku_data[n].wazamei=inputc;break; のところで、 「左のオペランドが、左辺値になっていません。」と出てしまいます。 代入する型が合ってないのが原因と思い、 case 0: touroku_data[n].name=itoa(inputc);break; case 1: touroku_data[n].wazamei=itoa(inputc);break; にすると 「'itoa' : 関数に 1 個の引数を指定できません。」と出てしまいます。 case 0: touroku_data[n].name=inputc;break; case 1: touroku_data[n].wazamei=inputc;break; の部分はどういう風に記述したらよいのでしょうか? どなたか教えてください。 また他にもプログラム記述がおかしい箇所があれば教えてください。
メンテ

Page: 1 |

Re: ファイルから読み込んだデータが上手く代入できない ( No.1 )
名前:通貨 日時:2018/08/26 12:45

こんなんでどうでしょうか。(何点かいじっています) #include "DxLib.h" // 構造体 typedef struct { char name[64]; // 名前(文字列で扱う) char wazamei[64]; // 技名(文字列で扱う) int type; // タイプ(数値で扱う) }touroku_data_t; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(true); //ウィンドウモード SetGraphMode(1024, 768, 32); //ウィンドウサイズを変更する // DXライブラリ初期化処理 if (DxLib_Init() == -1) return -1; // エラーが起きたら直ちに終了 int n, num, i, fp; char fname[32] = { "touroku.dat" }; char inputc[64]; // 構造体の要素をとりあえず100個作る touroku_data_t touroku_data[100]; fp = FileRead_open(fname); //ファイル読み込み if (fp == NULL) { printfDx("read error\n"); goto EXIT__; } n = 0, num = 0; while (1) { for (i = 0; i<64; i++) { inputc[i] = FileRead_getc(fp);//1文字取得する if (inputc[i] == ',' || inputc[i] == '\n') {//カンマか改行なら inputc[i] = '\0'; //そこまでを文字列とし break; } if (inputc[i] == EOF) {//ファイルの終わりなら goto EXFILE;//終了 } } switch (num) { case 0: strcpyDx(touroku_data[n].name, inputc); break; case 1: strcpyDx(touroku_data[n].wazamei, inputc); break; case 2: touroku_data[n].type = atoi(inputc); break; } num++; if (num == 3) { num = 0; n++; } } EXFILE: FileRead_close(fp); // ちゃんと代入されているか表示 for (int i = 0; i<n; i++) { printfDx("名前:%s\n", touroku_data[i].name); printfDx("技名:%s\n", touroku_data[i].wazamei); printfDx("タイプ:%d\n", touroku_data[i].type); } WaitKey(); // キー入力待ち EXIT__: DxLib_End(); // DXライブラリ使用の終了処理 return 0; }
メンテ
Re: ファイルから読み込んだデータが上手く代入できない ( No.2 )
名前:ねこここ(解決) 日時:2018/08/26 20:59

>>通貨様 出来ました! 回答ありがとうございました! 助かりました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存