feof
int feof( FILE *fp )
ファイルfpがファイルエンドなら非0を返す。
ファイルfpがファイルエンドでない間、処理を続ける。
ファイルfpがファイルエンドなら非0を返す。
while ( !feof( fp ) ) {
c = getc( fp );
・・・
}
ファイルfpがファイルエンドでない間、処理を続ける。
http://gardener.hustle.ne.jp/programming/
C言語関連の要点まとめ(更新停止中)
while ( !feof( fp ) ) {
c = getc( fp );
・・・
}
putc | 1文字書き出し | putc( c, fo ) |
fputc | 同上 | fputc( c, fo ) |
getc | 1文字読み込み | c = getc( fi ) |
fgetc | 同上 | c = fgetc( fi ) |
fputs | 1行書き出し | fputs( str, fo ) |
fgets | 1行読み込み | fgets( str, 256, fi ) |
fprintf | 書式付き書き出し | fprintf( fo, "%d\n", a ); |
fscanf | 書式付き読み込み | fscanf( fi, "%d", &a ); |
#include <stdio.h>
void main( int argc, char *argv[] )
{
printf( "argc:%d\n", argc );
for ( int i = 0; i < argc; i++ )
printf( "argv[ %d ]:%s\n", i, argv[ i ] );
}
適当.exe 第1引数 第2引数
pause
argc:3
argv[ 0 ]:適当.exe
argv[ 1 ]:第1引数
argv[ 2 ]:第2引数
#include <stdio.h>
#include <stdlib.h>
void main( int argc, char *argv[] )
{
FILE *fp;
int c;
if ( argc != 2 ) {
printf( "引数の数が違います\n" );
exit( 1 );
}
if ( ( fp = fopen( argv[1], "r" ) ) == NULL ) {
printf( "入力ファイルがオープンできません\n" );
exit( 1 );
}
while ( ( c = getc( fp ) ) != EOF )
putchar( c );
fclose( fp );
}
#include <stdio.h>
#define DEBUG
void main()
{
printf( "処理開始\n" );
#ifdef DEBUG
printf( "%s\n", __TIME__ );
printf( "%s\n", __DATE__ );
printf( "%s\n", __FILE__ );
printf( "%d\n", __LINE__ );
#endif
printf( "処理終了\n" );
}
処理開始
11:56:29
Oct 19 2006
C:\xxx\xxx\xxx\tekito.cpp
13
処理終了
#include <stdio.h>
//#define DEBUG
void main()
{
printf( "処理開始\n" );
#ifdef DEBUG
printf( "%s\n", __TIME__ );
printf( "%s\n", __DATE__ );
printf( "%s\n", __FILE__ );
printf( "%d\n", __LINE__ );
#endif
printf( "処理終了\n" );
}
処理開始
処理終了
__TIME__ | コンパイル時刻を「時:分:秒」の書式で表す文字列 |
__DATE__ | コンパイル日付を「月 日 年」の書式で表す文字列 |
__FILE__ | 処理中のソースプログラムの名前を表す文字列 |
__LINE__ | 処理中のソースプログラムの行番号を表す10進数(先頭行は1) |
#include <stdio.h>
int func1( int, int );
int func2( int, int );
void main()
{
int ( *funcp[] )( int, int ) = { func1, func2 };
printf( "%d\n", funcp[0]( 1, 2 ) );
printf( "%d\n", funcp[1]( 1, 2 ) );
}
int func1( int i, int j )
{
return i + j;
}
int func2( int i, int j )
{
return i - j;
}
3
-1
#include <stdio.h>
int loopA( int );
void loopB( int );
void main()
{
int i = 3;
loopA( i );
printf( "\n" );
loopB( i );
}
int loopA( int n )
{
printf( "loopA-out1:%d\n", n );
if ( !n ) {
printf( "出力終了\n" );
return 0;
}
return loopA( --n );
printf( "loopA-out2:%d\n", n );
}
void loopB( int n )
{
printf( "loopB-out1:%d\n", n );
if ( !n ) {
printf( "出力終了\n" );
return;
}
loopB( --n );
printf( "loopB-out2:%d\n", n );
}
loopA-out1:3
loopA-out1:2
loopA-out1:1
loopA-out1:0
出力終了
loopB-out1:3
loopB-out1:2
loopB-out1:1
loopB-out1:0
出力終了
loopB-out2:0
loopB-out2:1
loopB-out2:2
int a[10] = { 0 };
int a[3][10] = { 0 };
int a[3][10] = { 1 };
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
int a[3][10] = { 0, 1, 2, 3, 4, 5 };
0 1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
int a[3][10] = { { 0, 1 }, { 2, 3, 4, 5 } };
0 1 0 0 0 0 0 0 0 0 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
char *str[5] = { "apple", "orange" };
apple
orange
(null)
(null)
(null)
#define | マクロの定義 |
#undef | 定義の無効化 |
#include | ファイルの取り込み |
#if | 条件コンパイル |
#elif | 条件コンパイル |
#else | 条件コンパイル |
#ifdef | 条件コンパイル |
#ifndef | 条件コンパイル |
#line | 行制御 |
#error | エラー生成 |
#pragma | 厳密にはコンパイラ制御文 |
#include <stdio.h>
#define NUM 1000
void main()
{
int prime[ NUM ], i, j;
for ( i = 2; i < NUM; i++ )
prime[ i ] = 1; // 1を立てておく
for ( i = 2; i < NUM; i++ ) {
if ( prime[ i ] == 1 ) { // 1ならそれは最初にみつかった素数
for ( j = 2; i * j < NUM; j++ )
prime[ i * j ] = 0; // i以外のiの倍数を全て倒す
}
}
printf( "素数:1 " );
for ( i = 2; i < NUM; i++ ) {
if ( prime[ i ] == 1 )
printf( "%d ", i );
}
}
#include <stdio.h>
void bitpat( int x )
{
int i;
for ( i = 31; i>=0; i-- )
printf( "%d", ( x >> i ) & 0x00000001 );
printf( "\n" );
}
void main()
{
int a;
while ( scanf( "%d", &a ) != EOF )
bitpat( a );
}
優先順位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
関数、かっこ | () | ||||||||||||||
配列 | [] | ||||||||||||||
構造体 | .、-> | ||||||||||||||
型 | sizeof | ||||||||||||||
ポインタ | *、& | ||||||||||||||
インクリメント・ディクリメント | ++、-- | ||||||||||||||
算術 | - | *、/、% | +、- | ||||||||||||
関係 | <、<=、>、>= | ==、!= | |||||||||||||
ビット | ~ | <<、>> | & | ^ | | | ||||||||||
論理 | ! | && | || | ||||||||||||
条件 | ?: | ||||||||||||||
代入 | =、+=、*=、etc | ||||||||||||||
カンマ | , |
#include <stdio.h>
void dispA( char** s )
{
int i = 0;
printf( "sのアドレス%p:格納アドレス%p\n", &s, s );
while ( s[ i ] != NULL ) {
printf( "s[%d]のアドレス%p:格納アドレス%p:%s\n", i, &s[ i ], s[ i ], s[ i ] );
i++;
}
printf( "sのアドレス%p:格納アドレス%p\n\n", &s, s );
}
void dispB( char** s )
{
printf( "sのアドレス%p:格納アドレス%p\n", &s, s );
while ( *s != NULL ) {
printf( "sのアドレス%p:格納アドレス%p:%s\n", &s, *s, *s );
s++;
}
printf( "sのアドレス%p:格納アドレス%p\n", &s, s );
}
void main()
{
char *name[] = { "Candy", "Rolla", "Nancy", "Ann", "Eluza", NULL };
dispA( name );
dispB( name );
}
sのアドレス0012FF18:sの格納アドレス0012FF68
s[0]のアドレス0012FF68:s[0]の格納アドレス0042201C:Candy
s[1]のアドレス0012FF6C:s[1]の格納アドレス00423030:Rolla
s[2]のアドレス0012FF70:s[2]の格納アドレス00422FBC:Nancy
s[3]のアドレス0012FF74:s[3]の格納アドレス00422FB4:Ann
s[4]のアドレス0012FF78:s[4]の格納アドレス00422FAC:Eluza
sのアドレス0012FF18:sの格納アドレス0012FF68
sのアドレス0012FF18:sの格納アドレス0012FF68
sのアドレス0012FF18:sの格納アドレス0042201C:Candy
sのアドレス0012FF18:sの格納アドレス00423030:Rolla
sのアドレス0012FF18:sの格納アドレス00422FBC:Nancy
sのアドレス0012FF18:sの格納アドレス00422FB4:Ann
sのアドレス0012FF18:sの格納アドレス00422FAC:Eluza
sのアドレス0012FF18:sの格納アドレス0012FF7C
#include <stdio.h>
int sum( int* a )
{
int i = 0, sum = 0;
while ( *a != -999 ) {
sum += *a;
a++;
}
return sum;
}
void main()
{
int a[][4] = { { 1, 2, 3, 0 }
, { 4, 5, 6, 0 }
, { 7, 8, 9, -999 } };
printf( "%d\n", sum( a[0] ) );
}
#include <stdio.h>
int sumA( int* a )
{
int sum = 0;
while ( *a != -999 ) {
sum += *a;
a++;
}
return sum;
}
int sumB( int* a )
{
int i = 0, sum = 0;
while ( a[ i ] != -999 ) {
sum += a[ i ];
i++;
}
return sum;
}
void main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -999 };
printf( "%d\n", sumA( a ) );
printf( "%d\n", sumB( a ) );
}