LoginSignup
2
2

More than 5 years have passed since last update.

scanf(),fscanf()で数値を読み込みたいがスペースは無視する

Last updated at Posted at 2016-01-20

scanf,fscanfで実数を読み込む際に空白・スペースを無視する方法

動機

データの数値の前後に空白・スペースがあるCSVファイルを扱う際に、scanfで実数(%f,%lfフォーマット)が読み込めない問題が発生しました。

結論

読み込みのフォーマット指定の後にスペースを一つ入れると、csvの中の空白を無視してくれるようです。
まずは結論のコードから

スペースを無視するfscanf
fscanf( fp, "%lf ,%lf ,", &freq, &fft);

サンプル

src

以下は空白に対応できないコード

スペースがあるとうまく数値を取り込めないfscanf
fscanf( fp, "%lf,%lf,", &freq, &fft);

サンプルコードと空白含むデータのCSVサンプル

#include<stdio.h>
int main(){
FILE *fp;
if((fp= fopen("test.csv","r"))==NULL){
  printf("file open FAILED!\n");
}
double freq,fft;
int count = 0;
for(count;count<5;count++){
fscanf( fp, "%lf ,%lf ,", &freq, &fft);
printf("fscan%d %lf %lf\n",count,freq,fft);
}
fclose(fp);
return(0);
}
test.csv
1,2,
 3,4 ,
5 , 6,
 3 ,   4 ,
5    ,6    ,

実行結果

コンパイル・実行結果
$ gcc -o sample_scanf.exe sample_scanf.c
$ ./sample_scanf.exe
fscan0 1.000000 2.000000
fscan1 3.000000 4.000000
fscan2 5.000000 6.000000
fscan3 3.000000 4.000000
fscan4 5.000000 6.000000

今回の環境

私の実行環境です。

shell
$ gcc -v
組み込み spec を使用しています。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-msys/4.9.2/lto-wrapper.exe
ターゲット: x86_64-pc-msys
configure 設定: /msys_scripts/gcc/src/gcc-4.9.2/configure --build=x86_64-pc-msys --prefix=/usr --libexecdir=/usr/lib --enable-bootstrap --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --with-arch=x86-64 --disable-multilib --with-tune=generic --enable-__cxa_atexit --with-dwarf2 --enable-languages=c,c++,fortran,lto --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --disable-win32-registry --disable-symvers --with-gnu-ld --with-gnu-as --disable-isl-version-check --enable-checking=release --without-libiconv-prefix --without-libintl-prefix --with-system-zlib
スレッドモデル: posix
gcc バージョン 4.9.2 (GCC)

参考URI

「初心者のためのポイント学習C言語」>第5章 標準入出力関数(1)

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2