前提・実現したいこと
C言語でカンマ区切りのファイルを読み込み、二次元配列に収納するプログラムの実装をしたいと思っています。サンプルファイルとしては以下のような形です。
a,100 b,100 c,100
satou,apple katou,orange itou,grape
コマンドラインからファイルを受け取り、fgetsで一行ずつ読み込み、sscanfで要素を取り出し、それぞれを二次元配列に入れようと思っているのですが、printfで何も出力されず、while文の中でprintfデバックするためにprintf("Hi")
みたいなコードを入れても何も出力されませんでした。
該当のソースコード
#include <stdio.h> #include <stdlib.h> // コマンドラインからの入力を受け取るので、int argc : 引数の個数, char *argv[] : 引数の配列(ポインタ) int main(int argc, char *argv[]) { // もしコマンドラインからの入力が無い , 1個以上の場合は強制終了 if (argc == 1) { printf("You must input file"); exit(-1); }else if(argc >= 3){ printf("You must input single file"); exit(-1); } //ファイル型のポインタ変数を作成 FILE *fp; // 元ファイルを書き変える事はないので、読み出し専用 fp = fopen(argv[1], "r"); if (fp == NULL){ printf("File is Invaild."); exit(1); } //ファイルが終わるまで読み込む //二次元配列に放り込む、 // fgetsから受け取る文字サイズ char str[150]; // ファイルを読み込んだ結果を収容する二次元配列(0:Key 1:Contens) char Dic_2darray[100][2]; int i=0; while (fgets(str,150, fp)) { sscanf(str,"%s,%s",&Dic_2darray[i][0],&Dic_2darray[i][0]); printf("%s %s\n",Dic_2darray[i][0],Dic_2darray[i][1]); i++; } fclose(fp); }
試したこと
似たような事を実装しようとしている例を探してみて、真似てみたのですが上手くいきませんでした。
https://teratail.com/users/Chloe____/Question#question-feed
アカウント複数使うなよ。
うまくいかなかったというのは、どういう結果になったのですか?
コードをちゃんと調べてはいませんが、とりあえず
sscanf(str,"%s,%s",&Dic_2darray[i][0],&Dic_2darray[i][0]);
は
sscanf(str,"%s,%s",&Dic_2darray[i][0],&Dic_2darray[i][1]);
の間違いではないですか?
Zuishinさん、こんばんは。
今まで私はVB.netを使った事は無いですし、質問のフォーマット文体もかなり違うので恐らく他の方だと思うのですが...
itagagakiさん
すいません、それは自分の記述ミスです。
「うまくいかなかった」というのは、コマンドラインから受け取ったカンマ区切りファイルからの入力が受け取れず、何もprintfしなかったいう事です。質問文を修正します。
指摘ありがとうございます。
>> 似たような事を実装しようとしている例を探してみて、
その具体例を出してください。
私ら回答者が提示しても『それやったけど出来んかったから聞いてんだろが!!!』と逆ギレする人が多すぎです。
知らねーよって話です。
回答者は質問者と同じ環境にある…わけじゃないので、提示された情報からしか読み取れません。
それを、情報を出し渋って後出しアンド逆ギレはお門違いです。
(質問者さんがそうだとは言っていませんが、そういうタイプが多い)
なので『試したこと』ぐらいは書きましょうよ。
それと、多分タイプミスだとは思うのですが、
(コメント文にて)
>> もしコマンドラインからの入力が無い , 1個以上の場合は強制終了
は変です。『1個以上』じゃありません。
BeatStrさん、すいませんでした。参考にした例としてはここらへんです。
https://stackoverflow.com/questions/26443492/read-comma-separated-values-from-a-text-file-in-c
https://mementoo.info/archives/713
次から気を付けます。
回答1件
あなたの回答
tips
プレビュー