Upgrade to Pro — share decks privately, control downloads, hide ads and more …

基礎情報処理演習(12)文字と入出力

 基礎情報処理演習(12)文字と入出力

自然言語処理研究室

December 06, 2013
Tweet

More Decks by 自然言語処理研究室

Other Decks in Programming

Transcript

  1. 文字列はどう保存されているか char word[] = ”stop”; と宣言すると、実は下記のように保存される。 word[0] = 's'; word[1]

    = 't'; word[2] = 'o'; word[3] = 'p'; word[4] = 0; よって char p[10] と宣言すると9文字しか保存できな い。 8 すべての文字列の最後に自動的 に付加され、文字列の最後尾を 意味する。つまり「ここで終わり」 印。0 は \0 と書くこともある。
  2. 文字と文字列の入出力 文字の入出力には %c を使う。 scanf_s (“%c”, &ch); printf (“%c”, ch);

    文字列の入出力には %s を使う。 scanf_s (“%s”, ss); printf (“%s\n”, ss); ただし、文字列のscanf_sは空白を入力できないので、 後述するgetcharやgets_sがおすすめ。 10
  3. 文字の連続入力のパターン 1文字ずつ連続入力する時は通常こう書く。 while ((ch = getchar()) != EOF) {  /*

    表示の例 */ printf (“%c”, ch); } EOFとはEnd of Fileの略で、入力の終了を意味す る。 Windowsでは、Ctrl-Zを押すとEOFの意味にな り、この繰り返しが終了する。 13
  4. 行の連続入力のパターン 文字単位入力の時と同様に、1行ずつ入力する時はこう 書くのが定番パターン。 while (gets_s(ss, sizeof(ss)) != NULL) { /*

    表示の例 */ printf (“%s\n”, ss); } 16 文字の時のEOFがNULLになっている ところが違っているので注意。 Ctrl-Z で終了なのは同じ。
  5. オープンとクローズ #include <stdlib.h> // exit()に必要 FILE *fp; if ((fp =

    fopen(“file.txt”, “r”)) == NULL) { printf (“オープンできない!\n”); exit(1); } /* ここにやりたい作業を書く */ fclose(fp); 19
  6. この他、fprintfやfscanf_sという関数もある。 …の書き方はprintf, scanf_sと全く同じ。 fprintf(fp, …); fscanf_s(fp, …); (おまけ) 実は内部でこんなふうに書き換えられている。 printf(…);

    ⇒ fprintf(STDOUT, …); scanf_s(…); ⇒ fscanf_s(STDIN, …); STDINやSTDOUTはコンソールを意味する特殊なファイルポインタ で、stdio.hで定義されている。 24