C exercises (2) stdio

標準ライブラリ関数 : 標準入出力関数

標準入出力関数には(C言語プログラミング)で説明した printf() や scanf() の他にも 下のように 1文字専用の入出力関数と 1行専用の入出力関数が用意されている。

標準入力から文字入力 getchar 関数
標準出力から文字出力 putchar 関数
標準入力から文字列入力 gets 関数
標準出力から文字列出力 puts 関数
標準入力から書式付き入力 scanf 関数
標準出力から書式付き出力 printf 関数

標準入力関数(参考)

getchar() int getchar(void); 標準入力(キーボード)からの入力値を「EOF」まで1文字づつ取得します。エラー時は「EOF」を返します。
gets() char *gets(char *str); 標準入力(キーボード)からの入力値を「EOF」※1まで1行づつ取得して、その文字列の先頭アドレスを引数のchar型ポインタ(*str)に渡すと共に戻り値としても返します。エラー時は「EOF」を返します。
但し現在では読み込む長さを指定できる「fgets()」の使用が推奨されています。
fgets() char *fgets(const char *str, int n, FILE *stream); 「*stream」で示されるストリーム※2から「n-1」文字を取得し「\0」を付加して、その文字列の先頭アドレスを引数のchar型ポインタ(*str)に渡すと共に戻り値としても返します。
scanf() int scanf(char *format,…) ; 標準入力(キーボード)からの入力値を書式指定した文字列として取得します。
第2引数以降は書式指定文字列※3の変換指定子の数だけ変数を指定します。
戻り値は成功時には入力データの数を返し、失敗時はEOFを返します。

標準出力関数(参考)

fputc() int fputc(int c, FILE *stream); キャラクタ(ASCIIコード)c をストリーム※2に出力します。
putc() int putc(int c, FILE *stream); 「fputc」と同機能のマクロです。
putchar() int putchar(int c); キャラクタ(ASCIIコード)c を標準出力(画面出力)します。
fputs() int fputs(const char *str, FILE *stream); 文字列 s をストリーム※1に出力します。
puts() int puts(const char *str); 文字列 s を標準出力(画面出力)します。
fprintf() int fprintf(FILE *stream, const char *format,…); 書式指定文字列※2をストリームに出力します。
第2引数以降は出力元となる変数を変換指定子の数だけ指定します。
printf() int printf(const char *format,…); 書式指定文字列を標準出力(画面出力)します。
第2引数以降は出力元となる変数を変換指定子の数だけ指定します。

例題1:

キーボードから「Ctrl+Z」を入力することによりループを終了させることができます。

入力した数値を加算、「Ctrl+Z」を入力すると、集計を出力

#include <stdio.h>

void main(void)
{
  int n;
  int sum = 0;
  
  printf("整数を入力して下さい\t");
  while (scanf("%d", &n) != EOF) {	// …「Ctrl+Z が入力されるまで」という意味
  
    sum = sum + n;
  }
  printf("sum = %d\n", sum);

  fflush(stdin); 
  getchar(); 
}

例題2:

「Ctrl+Z」を押されるまで、文字列を入力し、入力した文字列のスペースの箇所で、改行して表示する。

/* a6-1-3.c */
#include <stdio.h>

int main(void)
{
  char str[256];
  int i;
                    // 
  puts("文字列を入力してください。(終了条件:Ctrl+Z)");
  while (gets(str) != NULL) 
  //gets(str);
  {	puts("入力文字列をスペースで改行して表示します。");
    for (i = 0; str[i] != '\0'; i++) 
    {	/* スペースで改行 */
      if (str[i] == ' ') 
        putchar('\n');
      /* スペース以外はそのまま表示 */ 
      else {
        putchar(str[i]);
      }
    }
    putchar('\n');
  }

  return 0;
}

3 thoughts on “C exercises (2) stdio”

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


Related Post

C exercises(9) Basics of FunctionC exercises(9) Basics of Function

関数の基本 C言語において関数を使うことには、以下のような利点があります。 関数化しておくとそれを1つのブラックボックスとして扱うことができます。 つまり、使用する側が知っておくべきことは、以下の通りです。 入力として、どのような引数を与えるか 出力として、関数がどんな値を返すのか 関数を使ったことによって、どんな副作用があるか 一度、関数として作成しておけば、後で何度でも再利用することができる 関数として各機能をまとめていくと、一般にプログラムが見やすく、デバッグの作業もしやすい 関数の呼び出し #include <stdio.h> void func();   //関数のプロトタイプ宣言 int main() { func();    //関数呼び出し printf(" ここがメイン関数内\n"); return 0; } void func()    //自作関数 { […]

C exercises(5) AddressC exercises(5) Address

ポインタの仕組み:アドレスとは ポインタはC言語(および拡張言語)に特有の概念で、C言語を学び始めた初心者が必ずといっていいほどつまづく概念でもあります。ポインタがどうしても理解できないためにC言語に挫折してしまう方もいます。 アドレスの基本 コンピュータの記憶装置(メモリ)には、アドレスが付けられている。 変数のアドレス 変数のアドレスを取得するには変数名の前にアンパサンド “&”をつけます。 int a = 123; printf(“aのアドレス : %p\n”, &a); 配列のアドレス 配列の先頭をアドレスは、配列名だけで示します。要素のアドレスは&配列名[添字]で示します。 #include <stdio.h> int […]

C exercises (1) guidanceC exercises (1) guidance

C言語プログラミングⅡの試験解説 #2015年度解答付後期C言語2プロ試験問題 C言語検定試験について 主催・認定 サーティファイ情報処理能力認定委員会 試験名 C言語プログラミング能力認定試験 (C-Language Programming Skills Qualification Test) 試験目的 C言語を駆使して応用プログラム(言語処理系、ユーティリティなど)を作成する能力を認定します。 認定基準 一級 C言語を駆使し、応用プログラム(言語処理系、ユーティリティなど)が作成できる能力を有する。 また使用しているOSについて理解をしている。 二級 小規模のプログラム(500行程度)が適切に(理路整然、簡潔、正しく、速く)書ける。 […]