C

Cのatof()で"2.01"は2.099999...になる

C

浮動小数点は誤差がでちゃう。 できるなら乗算して整数にしてあつかうようにしたほうがいいけど小数点第2までしか扱わない、とか仕様決めれば atof("2.01")したら+0.001などして誤差修正するといい場合もあるかもねなんにしろ、実装次第。

VC++でファイルが読み込み専用か確認する

C VC MFC

long attr = GetFileAttributes(pFilename); if(attr != -1){ // ファイルがないと-1 if (FILE_ATTRIBUTE_READONLY == (attr & FILE_ATTRIBUTE_READONLY)) { CString mess; mess.Format("ファイルの書き込みに失敗しました。読み込み専用になっている可能性…

ファイルサイズの計算に fseek() および ftell() を使用しない

C

fseek() からのftell()は推奨されないそうです。fstatを使うといいよ。 #include <io.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <share.h> FILE *fp; long file_size; char *buffer; struct stat stbuf; int fd; fd = open("foo.bin", O_RDONLY); if (fd == -1) { /* エラ</share.h></sys/stat.h></sys/types.h></fcntl.h></io.h>…

CのfscanfによるCSV(カンマで区切られたファイル)の読み込み

C

#include <stdio.h> int main(){ FILE *fp; char *fname = "sample.csv"; int ret; double data[3]; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } while( (ret=fscanf(fp, "%lf,%lf,%lf", &data[0], &dat</stdio.h>…

C/C++のXML Parserについてよくまとまっているサイト

C CPP

http://xoyip.hatenablog.com/entry/2014/07/21/193000 参照

C言語で苦しむロックフリー入門

C

ためになるhttps://www.slideboom.com/presentations/1350345/C%E8%A8%80%E8%AA%9E%E3%81%A7%E8%8B%A6%E3%81%97%E3%82%80%E3%83%AD%E3%83%83%E3%82%AF%E3%83%95%E3%83%AA%E3%83%BC%E5%85%A5%E9%96%80%EF%BC%88%E4%BB%AE

C言語でのchar short long longlongでの最大値の定義

C

limits.hに色々なタイプのCの整数の最大値と、最小値が文字定数として定義されています ... #define CHAR_BIT 8 /* number of bits in a char */ #define SCHAR_MIN (-128) /* minimum signed char value */ #define SCHAR_MAX 127 /* maximum signed char …

C言語でtrim

C

[C] Trimは文字列の前後のスペースを取り除く、トリミングを行う関数。 VBとか他の言語には標準でついてたりするけどCには無いので。 #include <stdio.h> #include <string.h> char* ltrim (const char* string) { char* tmp = (char*) string; for (; *tmp == 0x20 && *tmp != </string.h></stdio.h>…

小数点第何位かで四捨五入

C

[C] テキストファイルに出力するんだったら丸めたい桁に5足して、sprintfで桁指定の出力するといい // 第4位で四捨五入 double num = 0.66666666; num = num + 0.0005; char buff[1024]; sprintf(buff,"%.3f",num);

文字列から数値に変換

C CPP

文字列の日付を数値にして抽出など。CStringでも使える。 char *str = "2013/4/9" long year,month,day; sscanf(str,"%d/%d/%d",&year,&month,&day);ネタ元 http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/program/C/DialogBase/app/string/ http://www9.pla…

C標準関数でファイルサイズの取得 fseek( fp, 0, SEEK_END ) / ftell( fp )

C

久々で忘れちゃってたのでメモ #include <stdio.h> int main(void) { FILE *fp; char *fname = "test.txt"; long sz; fp = fopen( fname, "rb" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } fseek( fp, 0, SEEK_END ); sz = ftel</stdio.h>…

シフトJIS文字列の判定処理例

C

#define jms1(c) \ (((0x81 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0x9F)) || ((0xE0 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0xFC) )) #define jms2(c) \ ((0x7F != (unsigned char)(c)) && (0x40 <= ((unsigned char)(c)))…

引数の変数名 src は source(送り元)の略であり, dest は destination(行き先)の略である

C

いままで意識してなかったけど、そういやそうだなと思った。

コンパイル日付を得るには__DATE__ 但し 英表記

C

Mar 30 2008 って感じ。数字で欲しいときは頑張って変換するっきゃない。

qsort()例

C

小さい順(昇順)に並び替える static int compSmallLong( const void *arg1, const void *arg2 ) { return *(( long * )arg1 ) - *(( long * )arg2 );} ・・・ long arr_sample[4]; arr_sample[0] = 10; arr_sample[1] = 5; arr_sample[2] = 4; arr_sample[3] = …

エラー番号の取得 エラー内容の取得

C

fopen()で失敗したときのエラーの種類を知る方法。 #include <stdio.h> #include <errno.h> void main(void) { FILE *fp = fopen( "nofile.zzz", "r" ); if( fp == NULL ){ printf( "%d\n", errno ); } else{ fclose( fp ); } }こっちだとエラーの中身を文字列で表示。 #includ</errno.h></stdio.h>…

指定した年の日数を返す

C

使うときはエラー処理とか入れてね。 #include <time.h> long count_day(long year){ tm data; data.tm_year = year-1900+1; data.tm_mon = -1+1; data.tm_mday = 1; data.tm_hour = 0; data.tm_min = 0; data.tm_sec = 0; data.tm_isdst = 0; time_t next_time = mk</time.h>…

C/C++で四捨五入

C CPP

小数を整数に四捨五入する場合。 #include <math.h> ... double x = 5.5674; // 例 double round_x; round_x=floor(x*100+0.5)/100; ... floor()は 入力値以下の最大の整数値を計算する関数。参考 http://oshiete.nikkeibp.co.jp/qa2207594.html http://www.bohyoh.c</math.h>…

高速な一番右端の立っているビット位置検出

C CPP

いつか役立つかも。ということでメモ http://blog.livedoor.jp/dankogai/archives/51231722.html 上記の元ネタ http://d.hatena.ne.jp/siokoshou/20090704#p1 より詳しい解説 http://d.hatena.ne.jp/siokoshou/20090706

&& と || の短絡評価

C CPP

int a = 0; int b = 1; if (a == 0 || b == 1) printf("a\n");簡単に言えば、"a == 0" で条件が満たされているのでこっちだけ評価されて、"b == 1"は評価されないよという話。"b == 1"のほうに不具合があったりすると、しばらく隠れていて開発終盤で発覚、と…

アルファベット大文字を小文字に変換する

C CPP

tolower() 関数を使います。これはC標準。ネタ元 http://always-pg.com/c/runtime_rd/character/tolower.html 逆はtoupper()関数。ネタ元 http://always-pg.com/c/runtime_rd/character/toupper.html

スタティック(static)関数

C CPP

Cの場合 静的関数と呼ばれファイル内のみ有効で、定義されているファイル外では利用できなくなります。 C++の場合(クラスのメンバ関数で使用する場合) クラスの外部から静的メンバ関数を呼び出すには、「クラス名+"::"+静的メンバ関数名」という形式で呼び…

スタティック(static)変数

C CPP

聞かれて説明できなかったので復習。 関数やブロック内で宣言された変数で、そのブロックが終了しても値を保持しているもの。静的変数とも言う。 「static」というキーワードを用いて宣言する言語が多い。 オブジェクト指向のプログラミング言語の場合は、生…

アニメーションでみるソートアルゴリズム比較

http://vision.bc.edu/~dmartin/teaching/sorting/anim-html/all.html縦軸がソート前データの並び、横軸がアルゴリズム。どんなデータ配置のときに、どのアルゴリズムが速いかが目で見て分かります。

マージ・ソート : 巨大データのソート法

C CPP

http://codezine.jp/article/detail/2886?p=1ソートのアルゴリズムの一種。わかりやすく解説してあります。

C言語 FAQ 日本語訳

C

http://www.kouno.jp/home/c_faq/何かを手っ取り早く勉強するには、 基本を学ぶ。 FAQを読む。わからない点は調べる。 とのこと