C言語で文字列の終端である'\0'と改行コードである'\n'はどっちが先に来るのでしょうか?
またコメント部の画面表示の2重ループですが何故か.size() - 1する必要が出てきてしまうのですがどこで一個多く確保してしまっているのでしょうか?提示画像の上が読み込む.csvファイルです。下が実行結果です。最後がなぜか一つずれてしまいます。
#include "stdio.h" #include "stdlib.h" #include <vector> //.CSVファイルを読み込んでvector<int>二次元配列に格納 std::vector<std::vector<int>>* GetLoad_CSV(const char* filename,std::vector<std::vector<int>> *result = NULL) { FILE *fp; char tm[5000]; //読み込んだ.csvファイルの文字列 //const char *filename = "MapLayer1.csv"; //.csvファイルを読み込む //std::vector<std::vector<int>> idx; //マップチップ番号格納 std::vector<std::vector<int>> *idx = new (std::vector<std::vector<int>>); //マップチップ番号格納 int c = 0; int vi = 0; char str[10]; fp = fopen(filename, "r"); if (fp == NULL) { printf("読み込み失敗\n"); exit(1); } printf("読み込み成功\n\n"); while(fgets(tm, 5000, fp) != NULL) //一行づつ読み取り { idx->emplace_back(); int i = 0; while (true) { if ( (tm[i] >= '0' && tm[i] <= '9') || (tm[i] == '-' || tm[i] == '+') ) //文字だった場合 { str[c] = tm[i]; i++; c++; } else { int t = atoi(str);//数字をint型に変換 idx->back().push_back(t); //最後の配列に追加 //文字以外の数字でそれが'\0'だった最後なのでループを抜ける if (tm[i] == '\0') { break; } c = 0; i++; memset(str, '\0', sizeof(str)); //数字保存char型配列を空にする } } } // 画面表示 for (int i = 0; i < idx->size(); i++) { for (int j = 0; j < idx->at(i).size() - 1; j++) { printf("%d,", idx->at(i).at(j));///////////////////////////// } printf("\n"); } //格納するかどうか? if(result != NULL){ result = idx; } return idx;//第二引数がnullじゃない時 } int main() { GetLoad_CSV("MapLayer1.csv"); /* // 画面表示 for (int i = 0; i < idx.size(); i++) { for (int j = 0; j < idx[i].size() - 1; j++) { printf("%d,",idx[i][j]); } printf("\n"); } */ return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/29 04:28
退会済みユーザー
2020/07/29 04:49
2020/07/29 04:56
退会済みユーザー
2020/07/29 05:09
2020/07/29 05:38
退会済みユーザー
2020/07/29 06:43