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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

Avatar for 自然言語処理研究室

自然言語処理研究室

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