ソースコード
源文件
1|
2|
3|#include <stdio.h>
4|#include <string.h> /* strcat関数で必要 */
5|
6|int main(void)
7|{
8| FILE *fp;
9| char fname[256];
10|
11| int c;
12|
13| printf("ファイル名(拡張子不要)--");
14| scanf("%s", fname);
15|
16| fp = fopen(strcat (fname, ".txt"), "r");
17|
18| if(fp == NULL){
19| perror("ファイルをオープンできません\n");
20| return -1;
21| }
22|
23| while ((c = fgetc(fp)) != EOF)
24| putc(c, stdout);
25|
26| return 0;
27|}
「あれ?」と思われたところは15行目の「fopen(strcat(gets(fname), ".txt"), "r")」のところではないでしょうか
gets(fname); でユーザーがファイル名(拡張子なし)を入力します。gets の戻り値は fname なのです。したがってこれは、fopen(strcat(fname, ".txt"), "r")と同じです。
次に、strcatで拡張子なしのファイル名に「.txt」が付加されました。strcatの戻り値は追加先の文字列です。したがって fopen(fname(.txtが追加されえいる), "r")と同じなのです。
次に fgetc 関数はファイルから1文字ずつ読込みます。
int fgetc(
FILE *stream
);
これは、streamから1文字読込んで int 型で返す関数です。 が必要です。ファイルの終端まで来たら EOF を返します。
put 関数はファイル文字を出力します。
|