みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

テキストファイルの内容を2次元配列に格納したい

課題で用意されたテキストファイルを読み込み、空白を区切りとする文字列の単位で配列に格納したいのですが、やりかたがわかりません。

ソースプログラムですが

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAX 1000

int TextSplit(char *fname, char (*SpStr)[50]);

int main(void)
{
int i, n;
char fname[MAX], SpStr[MAX][50];
int Split;
FILE *fp;

printf("input File =>");
scanf("%s", fname);

Split = TextSplit(fname, SpStr);

printf("\n %d[文字列数] \n", Split);

return 0;
}

int TextSplit(char *fname, char (*SpStr)[50])
{
int i, j, k;
char Readstr[MAX];

FILE *fp;
fp = fopen(fname, "r");
if(fp == NULL)
{
printf("ファイルオープン失敗");
return 1;
}

i = 0;
while(fscanf(fp, "%s", SpStr) != EOF)
{
i++;
}

fclose(fp);

return i;
}

以上のソースプログラムですが、内容は「空白で区切る文字列の単位の総数を表示する」ものになっています。

今日の20時までに終わらせないといけないので、ご教授お願いします。
使ってるソフトはMicrosoft Visual Studioです。

投稿日時 - 2013-02-01 11:12:00

QNo.7922134

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

いまさらどうでもいいけど
fscanf(fp, "%s", SpStr)
はおかしい.

投稿日時 - 2013-02-02 14:46:16

ANo.4

TextSplitの中のwhileループにSpStr++;を挿入するだけです。
while(fscanf(fp, "%s", SpStr) != EOF)
{
SpStr++;
i++;
}

投稿日時 - 2013-02-02 11:37:21

ANo.3

TextSplitのみ:

int TextSplit(char *fname, char (*SpStr)[50]) {
char Readstr[MAX];
int ntoken;
FILE *fp;

fp = fopen(fname, "r");
if(fp == NULL) {
printf("ファイルオープン失敗");
return 0;
}

ntoken = 0;
while ( fgets(Readstr, MAX, fp) ) {
char* token;
for ( token = strtok(Readstr," \n"); token != NULL; token = strtok(NULL," \n") ) {
strcpy(SpStr[ntoken], token);
++ntoken;
}
}
fclose(fp);
return ntoken;
}

投稿日時 - 2013-02-01 21:48:24

ANo.2

>課題で用意されたテキストファイル

参考までに、その内容を見せていただくことは可能でしょうか。

投稿日時 - 2013-02-01 21:16:44

ANo.1

文字列じゃなくて数値ならできますか?

投稿日時 - 2013-02-01 12:39:13

補足

いえ、数値or文字列の問題ではなく
格納という作業のしかたがわからないので
数値でいけるのかもわからりません。

投稿日時 - 2013-02-01 15:23:54

あなたにオススメの質問