アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のようなリストファイル(list.c)
0038 tokyo
004 osaka
0021 fukuoka
0013 aomori
.
.
を一行ずつ読み込んだとき、最初の数字の方だけを表示(または変数に格納)
することは出来るのでしょうか?
もしくは一文字ずつ読み込んだとして、次の文字がスペースの場合次の行へ…
などと言うことも出来るのでしょうか?

2つも質問してますが、何かよいアイディアお聞かせ下さい!

A 回答 (4件)

fscanfの%s指定でも簡単に出来ると思いますが…。

(^_^)
scanf類は空白文字等を区切りとして読み込みますので。

fscanf(fp,"%s",str);

とかで読めるはずです。
このときfpはオープン済みのファイルのファイルポインタです。
そして勿論strは文字列として定義しておきます。
尚、fscanfの書式についてはうろ覚えですのでご使用前に調べてみて下さい。
    • good
    • 0

考え方だけを説明します。



実際に使うコマンドは、自分で調べてください。

■1行づつ読み込む場合
・読み込んだ行がサイズが0より大きければ以下の処理を行ないます。
・先頭から1文字づつスペースコードを読み込むまで数字を読み込む。
 (スペースは、アスキーコードの”40”?)
・アルゴリズムはスペースを探すループになります。

■1文字づつ読み込む場合

・読み込んだ行がサイズが0より大きければ以下の処理を行ないます。
・先頭から1文字づつスペースコードまたは改行コードを読み込むまで数字を読み込む。
 (改行コードはキャリッジリターンとラインフィードの2バイトからなります。コードはアスキー表を見てください。)
・この場合は、改行コードを読み込んだら次の行の処理になります。
・アルゴリズムは2重ループになります。
 (改行のループとスペースを探すループ)
    • good
    • 0

こんにちは。

itohhといいます。

スペースで区切られているんですよね。
それならば、strtok関数で簡単に分離できますよ。
使用方法は、ヘルプで参照してください。
サンプルも載っていますから、すぐに使い方は解ると思います。
    • good
    • 0

char num[32];



for( int i=0; i<n_data; i++ ) {
fscanf( fp, "%s%*s", num );
printf( "%s\n", num );
}

でどうでしょう?
    • good
    • 0

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