プロが教えるわが家の防犯対策術!

C言語でファイルの内容を strtok関数 を使って数字と文字を分けて配列に格納したいのですが、うまくできません。
どこが駄目なのかご指摘をお願いします!

ファイル内容
20
田中
10
鈴木

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
FILE *fp;
char str[256];
char *tp;
int i=0;
int num[10];
char na[10];

fp=fopen(argv[1],"r");
while(fgets(str,sizeof str,fp)!=NULL);

tp = strtok ( str, " " );
while(tp != NULL ) {
num[i]=atoi(tp);
tp = strtok( NULL," ");
if ( tp != NULL ){
na[i]=*tp;
}
i++;
}
printf("%d\n%s",num[0],na[0]);
printf("%d\n%s",num[1],na[1]);

fclose(fp);
return 0;
}

A 回答 (3件)

ザッと見ただけですが…



>fp=fopen(argv[1],"r");

ファイルのオープンに失敗しても強引に突き進むのは問題ありです。

>while(fgets(str,sizeof str,fp)!=NULL);

最後のセミコロンの意味を教えてください。

この回答への補足

ファイルについては了解しました!
while(fgets(str,sizeof str,fp)!=NULL); は、空文のつもりで書きました。

補足日時:2010/07/15 23:11
    • good
    • 0

宣言と、代入が駄目そうな気が・・・



>char na[10];

>na[i]=*tp;


char na[10][16];

strcpy(na[i],tp);

とか変更してみては?
    • good
    • 0

>while(fgets(str,sizeof str,fp)!=NULL);



これは、ファイルの終わりに到達するまで
何もしないで読み続けるだけである、
という意味を持っていることは理解できていますか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!