๐Ÿ–ฅ๏ธ C์–ธ์–ด์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ: fopen, fclose, fprintf, fscanf ์ด์ •๋ฆฌ! ๐Ÿ–ฅ๏ธ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ–ฅ๏ธ C์–ธ์–ด์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ: fopen, fclose, fprintf, fscanf ์ด์ •๋ฆฌ! ๐Ÿ–ฅ๏ธ

 

 

์•ˆ๋…•, ์นœ๊ตฌ๋“ค! ์˜ค๋Š˜์€ C์–ธ์–ด์˜ ๊ฝƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•ด ์žฌ๋ฏธ์žˆ๊ฒŒ ์•Œ์•„๋ณผ ๊ฑฐ์•ผ. ํŠนํžˆ fopen, fclose, fprintf, fscanf ํ•จ์ˆ˜๋“ค์„ ์ง‘์ค‘์ ์œผ๋กœ ํŒŒํ—ค์ณ๋ณผ ๊ฑฐ๋‹ˆ๊นŒ ์ž˜ ๋”ฐ๋ผ์™€! ๐Ÿ˜‰

์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ผ์ด ์ •๋ง ๋งŽ์ง€? ๊ทธ๋Ÿด ๋•Œ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์ด ์—†๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ๋ถˆํŽธํ• ๊นŒ? ์ƒ์ƒ๋งŒ ํ•ด๋„ ์•„์ฐ”ํ•˜์ง€ ์•Š์•„? ๐Ÿ˜ฑ ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ์ด ๊ท€์ค‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋งˆ์Šคํ„ฐํ•ด์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ ฅ์„ ํ•œ ๋‹จ๊ณ„ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ์ผœ์ค„ ๊ฑฐ์•ผ!

์žฌ๋Šฅ๋„ท์—์„œ๋„ ์ด๋Ÿฐ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๊ธฐ์ˆ ์€ ์ •๋ง ์ค‘์š”ํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ์žฌ๋Šฅ ๊ฑฐ๋ž˜ ๋‚ด์—ญ์„ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์˜ค๋Š˜ ๋ฐฐ์šธ ๋‚ด์šฉ์ด ํฐ ๋„์›€์ด ๋  ๊ฑฐ์•ผ. ์ž, ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ? ๐Ÿš€

1. fopen ํ•จ์ˆ˜: ํŒŒ์ผ์˜ ๋ฌธ์„ ์—ด๋‹ค ๐Ÿšช

fopen ํ•จ์ˆ˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ํŒŒ์ผ์„ '์—ด์–ด์ฃผ๋Š”' ์—ญํ• ์„ ํ•ด. ํŒŒ์ผ์„ ์—ด์–ด์•ผ ๋ญ˜ ํ•˜๋“  ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€? ์ง‘์— ๋“ค์–ด๊ฐ€๋ ค๋ฉด ๋ฌธ์„ ์—ด์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์•ผ! ๐Ÿ˜„

fopen ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์–ด:

FILE *fopen(const char *filename, const char *mode);

์—ฌ๊ธฐ์„œ filename์€ ์—ด๊ณ ์ž ํ•˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์ด๊ณ , mode๋Š” ํŒŒ์ผ์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์—ด ๊ฒƒ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด. ๊ทธ๋ฆฌ๊ณ  ์ด ํ•จ์ˆ˜๋Š” FILE ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด. ์ด ํฌ์ธํ„ฐ๊ฐ€ ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•  '์†์žก์ด'๊ฐ€ ๋˜๋Š” ๊ฑฐ์ง€.

mode์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์ฃผ์š”ํ•œ ๊ฒƒ๋“ค์„ ์‚ดํŽด๋ณผ๊นŒ?

  • "r": ์ฝ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ์„ ์—ด์–ด. ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด.
  • "w": ์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ํŒŒ์ผ์„ ์—ด์–ด. ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ , ์žˆ์œผ๋ฉด ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง€์›Œ๋ฒ„๋ ค.
  • "a": ์ถ”๊ฐ€ ๋ชจ๋“œ๋กœ ํŒŒ์ผ์„ ์—ด์–ด. ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ , ์žˆ์œผ๋ฉด ๋์— ์ด์–ด์„œ ์“ธ ์ˆ˜ ์žˆ์–ด.
  • "r+": ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๊ฐ€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“œ๋กœ ์—ด์–ด. ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด.
  • "w+": ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๊ฐ€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“œ๋กœ ์—ด์–ด. ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ , ์žˆ์œผ๋ฉด ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง€์›Œ๋ฒ„๋ ค.
  • "a+": ์ฝ๊ธฐ์™€ ์ถ”๊ฐ€๊ฐ€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“œ๋กœ ์—ด์–ด. ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด.

์ž, ์ด์ œ ์‹ค์ œ๋กœ fopen์„ ์‚ฌ์šฉํ•ด๋ณผ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด, "my_diary.txt"๋ผ๋Š” ํŒŒ์ผ์„ ์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ์—ด๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ผ:

FILE *file = fopen("my_diary.txt", "w");

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด "my_diary.txt" ํŒŒ์ผ์ด ์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ์—ด๋ฆฌ๊ณ , ๊ทธ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ file ๋ณ€์ˆ˜์— ์ €์žฅ๋ผ. ๋งŒ์•ฝ ํŒŒ์ผ์ด ์ด๋ฏธ ์žˆ์—ˆ๋‹ค๋ฉด ๋‚ด์šฉ์ด ๋ชจ๋‘ ์ง€์›Œ์ง€๊ณ  ์ƒˆ๋กœ์šด ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฑธ ๋ช…์‹ฌํ•ด์•ผ ํ•ด!

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด! fopen ํ•จ์ˆ˜๊ฐ€ ์‹คํŒจํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฑฐ์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ์ด ์—†๊ฑฐ๋‚˜ ๊ถŒํ•œ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์ง€. ๊ทธ๋ž˜์„œ ํ•ญ์ƒ fopen์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ํ™•์ธํ•ด์•ผ ํ•ด:

FILE *file = fopen("my_diary.txt", "w");
if (file == NULL) {
    printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
    return 1;  // ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
}
// ํŒŒ์ผ ์ž‘์—… ์ˆ˜ํ–‰
// ...

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŒ์ผ์„ ์—ด์ง€ ๋ชปํ–ˆ์„ ๋•Œ ์ ์ ˆํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์–ด. ์•ˆ์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด์„œ๋Š” ์ด๋Ÿฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ์ •๋ง ์ค‘์š”ํ•ด!

๐Ÿ’ก Pro Tip: ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ๋•Œ๋Š” ์šด์˜ ์ฒด์ œ์— ๋”ฐ๋ผ ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์–ด. Windows์—์„œ๋Š” '\'๋ฅผ, Unix ๊ณ„์—ด์—์„œ๋Š” '/'๋ฅผ ์‚ฌ์šฉํ•˜์ง€. ํ•˜์ง€๋งŒ C์—์„œ๋Š” '/'๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Windows์—์„œ๋„ ์ž˜ ๋™์ž‘ํ•ด. ๊ทธ๋ž˜๋„ ์ด์‹์„ฑ์„ ์œ„ํ•ด์„œ๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„!

fopen ํ•จ์ˆ˜๋Š” ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ์ •๋ง ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€:

FILE *profile_file = fopen("user_profiles.txt", "a");
if (profile_file != NULL) {
    fprintf(profile_file, "์ด๋ฆ„: %s, ๋‚˜์ด: %d, ์žฌ๋Šฅ: %s\n", name, age, talent);
    fclose(profile_file);
} else {
    printf("ํ”„๋กœํ•„ ์ €์žฅ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.\n");
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด. ์žฌ๋Šฅ๋„ท์—์„œ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์ž…ํ•  ๋•Œ๋งˆ๋‹ค ์ด๋Ÿฐ ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€? ๐Ÿ˜Š

fopen ํ•จ์ˆ˜ ๋„์‹ํ™” fopen ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ fopen("ํŒŒ์ผ๋ช…", "๋ชจ๋“œ") FILE* ํฌ์ธํ„ฐ ๋ฐ˜ํ™˜

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด fopen ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ•œ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ์ง€? ํ”„๋กœ๊ทธ๋žจ์—์„œ fopen ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ณ , ๊ทธ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด. ์ด ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ์„ ๋งˆ์Œ๋Œ€๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฑฐ์•ผ! ๐Ÿ˜Ž

fopen ํ•จ์ˆ˜๋Š” ํŒŒ์ผ ์ž…์ถœ๋ ฅ์˜ ์‹œ์ž‘์ ์ด์•ผ. ์ด ํ•จ์ˆ˜๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด, ๋‚˜๋จธ์ง€ ํŒŒ์ผ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค๋„ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ๊ทธ๋Ÿผ ์ด์ œ ํŒŒ์ผ์„ ์—ด์—ˆ์œผ๋‹ˆ, ๋‹ค์Œ์œผ๋กœ ๋ญ˜ ํ•ด์•ผ ํ• ๊นŒ? ๋ฐ”๋กœ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ๋Š” ๊ฑฐ์ง€! ๊ทธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ์„น์…˜์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฑฐ์•ผ. ๊ณ„์† ๋”ฐ๋ผ์™€์ค˜! ๐Ÿšถโ€โ™‚๏ธ๐Ÿšถโ€โ™€๏ธ

2. fprintf ํ•จ์ˆ˜: ํŒŒ์ผ์— ๊ธ€์“ฐ๊ธฐ โœ๏ธ

์ž, ์ด์ œ ํŒŒ์ผ์„ ์—ด์—ˆ์œผ๋‹ˆ ๋ญ”๊ฐ€๋ฅผ ์จ๋ณผ ์ฐจ๋ก€์•ผ! ์—ฌ๊ธฐ์„œ ๋“ฑ์žฅํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ fprintf ํ•จ์ˆ˜์•ผ. fprintf๋Š” 'file print formatted'์˜ ์•ฝ์ž๋กœ, ๋ง ๊ทธ๋Œ€๋กœ 'ํ˜•์‹ํ™”๋œ ๋‚ด์šฉ์„ ํŒŒ์ผ์— ์ถœ๋ ฅํ•œ๋‹ค'๋Š” ๋œป์ด์•ผ.

fprintf ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์–ด:

int fprintf(FILE *stream, const char *format, ...);

์—ฌ๊ธฐ์„œ stream์€ fopen์œผ๋กœ ์—ด์–ด๋‘” ํŒŒ์ผ ํฌ์ธํ„ฐ์•ผ. format์€ ์šฐ๋ฆฌ๊ฐ€ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์€ ํ˜•์‹์ด๊ณ , ๊ทธ ๋’ค์— ์˜ค๋Š” '...'์€ format์— ๋งž์ถฐ ์‹ค์ œ๋กœ ์ถœ๋ ฅํ•  ๊ฐ’๋“ค์ด์•ผ.

fprintf๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” printf์™€ ์‚ฌ์šฉ๋ฒ•์ด ๊ฑฐ์˜ ๋˜‘๊ฐ™์•„. ๋‹จ์ง€ ์ถœ๋ ฅ ๋Œ€์ƒ์ด ํ™”๋ฉด์ด ์•„๋‹ˆ๋ผ ํŒŒ์ผ์ด๋ผ๋Š” ์ ๋งŒ ๋‹ค๋ฅด์ง€! ๐Ÿ˜Š

์ž, ๊ทธ๋Ÿผ ์‹ค์ œ๋กœ fprintf๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ๊นŒ? ์•„๊นŒ ์—ด์–ด๋‘” "my_diary.txt" ํŒŒ์ผ์— ์ผ๊ธฐ๋ฅผ ์จ๋ณด์ž:

FILE *file = fopen("my_diary.txt", "w");
if (file == NULL) {
    printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
    return 1;
}

fprintf(file, "์˜ค๋Š˜์˜ ์ผ๊ธฐ\n");
fprintf(file, "๋‚ ์งœ: 2023๋…„ 6์›” 15์ผ\n");
fprintf(file, "๋‚ ์”จ: ๋ง‘์Œ โ˜€๏ธ\n");
fprintf(file, "๊ธฐ๋ถ„: ์ตœ๊ณ ! ๐Ÿ˜„\n");
fprintf(file, "์˜ค๋Š˜ ์žˆ์—ˆ๋˜ ์ผ: C์–ธ์–ด ๊ณต๋ถ€๋ฅผ ํ–ˆ๋‹ค. ํŠนํžˆ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•ด ๋ฐฐ์› ๋Š”๋ฐ, ์ •๋ง ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค!\n");

fclose(file);  // ํŒŒ์ผ ๋‹ซ๊ธฐ (์žŠ์ง€ ๋งˆ์„ธ์š”!)

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด "my_diary.txt" ํŒŒ์ผ์— ์šฐ๋ฆฌ์˜ ์ผ๊ธฐ๊ฐ€ ์ €์žฅ๋ผ. ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด ์ •ํ™•ํžˆ ์šฐ๋ฆฌ๊ฐ€ ์“ด ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ์„ ๊ฑฐ์•ผ!

๐ŸŒŸ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ์ : fprintf๋Š” printf์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์–‘ํ•œ ํ˜•์‹ ์ง€์ •์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด. ์˜ˆ๋ฅผ ๋“ค์–ด, %d๋Š” ์ •์ˆ˜, %f๋Š” ์‹ค์ˆ˜, %s๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•ด. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋„ ์‰ฝ๊ฒŒ ํŒŒ์ผ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€!

fprintf์˜ ๊ฐ•๋ ฅํ•œ ์ ์€ ๋ฐ”๋กœ ์ด ํ˜•์‹ ์ง€์ •์ž๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์žฌ๋Šฅ๋„ท์—์„œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž:

FILE *user_file = fopen("users.txt", "a");
if (user_file == NULL) {
    printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
    return 1;
}

char name[] = "๊น€์ฒ ์ˆ˜";
int age = 25;
char talent[] = "ํ”„๋กœ๊ทธ๋ž˜๋ฐ";
float rating = 4.8;

fprintf(user_file, "์ด๋ฆ„: %s, ๋‚˜์ด: %d, ์žฌ๋Šฅ: %s, ํ‰์ : %.1f\n", name, age, talent, rating);

fclose(user_file);

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด ํŒŒ์ผ์— ์ €์žฅ๋ผ. ์žฌ๋Šฅ๋„ท์—์„œ ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด ์ •๋ง ํŽธ๋ฆฌํ•˜๊ฒ ์ง€? ๐Ÿ˜‰

fprintf๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด. ๋ฐ”๋กœ ํŒŒ์ผ์„ ์“ฐ๊ธฐ ๋ชจ๋“œ("w")๋กœ ์—ด์—ˆ์„ ๋•Œ์•ผ. ์ด ๋ชจ๋“œ๋กœ ํŒŒ์ผ์„ ์—ด๋ฉด ๊ธฐ์กด์˜ ๋‚ด์šฉ์ด ๋ชจ๋‘ ์ง€์›Œ์ง€๊ณ  ์ƒˆ๋กœ์šด ๋‚ด์šฉ์œผ๋กœ ๋ฎ์–ด์จ. ๋งŒ์•ฝ ๊ธฐ์กด ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ถ”๊ฐ€ ๋ชจ๋“œ("a")๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ด.

fprintf ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ fprintf ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ ํ”„๋กœ๊ทธ๋žจ fprintf(file, "ํ˜•์‹", ๋ณ€์ˆ˜); ํŒŒ์ผ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ ์ „์†ก ์“ฐ๊ธฐ ์™„๋ฃŒ ์‹ ํ˜ธ

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด fprintf ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ํ”„๋กœ๊ทธ๋žจ์—์„œ fprintf ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์ง€์ •๋œ ํ˜•์‹์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์ผ๋กœ ์ „์†ก๋ผ. ๊ทธ๋ฆฌ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋‹ค์‹œ ์ „๋‹ฌ๋˜๋Š” ๊ฑฐ์ง€. ์ด๋Ÿฐ ๊ณผ์ •์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ์ •ํ™•ํ•˜๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿ‘

fprintf ํ•จ์ˆ˜๋Š” ํŒŒ์ผ ์ž…์ถœ๋ ฅ์—์„œ ์ •๋ง ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ด. ์ด ํ•จ์ˆ˜๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚˜์ค‘์— ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด, ๊ฑฐ๋ž˜ ๋‚ด์—ญ, ๋ฆฌ๋ทฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ด ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ.

์ž, ์ด์ œ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์–ด. ๊ทธ๋Ÿผ ๋‹ค์Œ์€ ๋ญ˜๊นŒ? ๋ฐ”๋กœ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฑฐ์ง€! ๊ทธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ์„น์…˜์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฑฐ์•ผ. ๊ณ„์† ๋”ฐ๋ผ์™€์ค˜! ๐Ÿƒโ€โ™‚๏ธ๐Ÿƒโ€โ™€๏ธ

3. fscanf ํ•จ์ˆ˜: ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜ค๊ธฐ ๐Ÿ“–

์ž, ์ด์ œ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์œผ๋‹ˆ, ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ์ฐจ๋ก€์•ผ! ์—ฌ๊ธฐ์„œ ๋“ฑ์žฅํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ fscanf ํ•จ์ˆ˜์•ผ. fscanf๋Š” 'file scan formatted'์˜ ์•ฝ์ž๋กœ, ๋ง ๊ทธ๋Œ€๋กœ 'ํ˜•์‹ํ™”๋œ ๋‚ด์šฉ์„ ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜จ๋‹ค'๋Š” ๋œป์ด์•ผ.

fscanf ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์–ด:

int fscanf(FILE *stream, const char *format, ...);

์—ฌ๊ธฐ์„œ stream์€ fopen์œผ๋กœ ์—ด์–ด๋‘” ํŒŒ์ผ ํฌ์ธํ„ฐ์•ผ. format์€ ์šฐ๋ฆฌ๊ฐ€ ์ฝ์–ด์˜ค๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด๊ณ , ๊ทธ ๋’ค์— ์˜ค๋Š” '...'์€ ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋“ค์˜ ์ฃผ์†Œ์•ผ.

fscanf๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” scanf์™€ ์‚ฌ์šฉ๋ฒ•์ด ๊ฑฐ์˜ ๋˜‘๊ฐ™์•„. ๋‹จ์ง€ ์ž…๋ ฅ ๋Œ€์ƒ์ด ํ‚ค๋ณด๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํŒŒ์ผ์ด๋ผ๋Š” ์ ๋งŒ ๋‹ค๋ฅด์ง€! ๐Ÿ˜Š

์ž, ๊ทธ๋Ÿผ ์‹ค์ œ๋กœ fscanf๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ๊นŒ? ์•„๊นŒ "my_diary.txt" ํŒŒ์ผ์— ์ €์žฅํ•œ ์ผ๊ธฐ๋ฅผ ๋‹ค์‹œ ์ฝ์–ด์™€๋ณด์ž:

FILE *file = fopen("my_diary.txt", "r");
if (file == NULL) {
    printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
    return 1;
}

char title[50], date[20], weather[10], mood[10];
char content[200];

fscanf(file, "%[^\n]\n", title);
fscanf(file, "๋‚ ์งœ: %[^\n]\n", date);
fscanf(file, "๋‚ ์”จ: %[^\n]\n", weather);
fscanf(file, "๊ธฐ๋ถ„: %[^\n]\n", mood);
fscanf(file, "์˜ค๋Š˜ ์žˆ์—ˆ๋˜ ์ผ: %[^\n]", content);

printf("์ œ๋ชฉ: %s\n", title);
printf("๋‚ ์งœ: %s\n", date);
printf("๋‚ ์”จ: %s\n", weather);
printf("๊ธฐ๋ถ„: %s\n", mood);
printf("๋‚ด์šฉ: %s\n", content);

fclose(file);  // ํŒŒ์ผ ๋‹ซ๊ธฐ (์žŠ์ง€ ๋งˆ์„ธ์š”!)

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด "my_diary.txt" ํŒŒ์ผ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ €์žฅํ•œ ์ผ๊ธฐ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์–ด. ๊ทธ๋ฆฌ๊ณ  printf๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์„œ ์ œ๋Œ€๋กœ ์ฝ์–ด์™”๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€!

๐Ÿ” ์ฃผ์˜ํ•  ์ : fscanf์—์„œ ์‚ฌ์šฉํ•œ %[^\n]์€ '์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ฝ์–ด์˜ค๋ผ'๋Š” ์˜๋ฏธ์•ผ. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณต๋ฐฑ์„ ํฌํ•จํ•œ ๋ฌธ์ž์—ด๋„ ํ•œ ๋ฒˆ์— ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์–ด. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์˜ ์œ„ํ—˜์ด ์žˆ์œผ๋‹ˆ, ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” fgets ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•ด!

fscanf์˜ ๊ฐ•๋ ฅํ•œ ์ ์€ ๋ฐ”๋กœ ์ด ํ˜•์‹ ์ง€์ •์ž๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์žฌ๋Šฅ๋„ท์—์„œ ์ €์žฅํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋‹ค์‹œ ์ฝ์–ด์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž:

FILE *user_file = fopen("users.txt", "r");
if (user_file == NULL) {
    printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
    return 1;
}

char name[50];
int age;
char talent[50];
float rating;

while (fscanf(user_file, "์ด๋ฆ„: %[^,], ๋‚˜์ด: %d, ์žฌ๋Šฅ: %[^,], ํ‰์ : %f\n", name, &age, talent, &rating) == 4) {
    printf("์ด๋ฆ„: %s, ๋‚˜์ด: %d, ์žฌ๋Šฅ: %s, ํ‰์ : %.1f\n", name, age, talent, rating);
}

fclose(user_file);

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ฝ์–ด์™€์„œ ํ™”๋ฉด์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์–ด. ์žฌ๋Šฅ๋„ท์—์„œ ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋ฉด ์ •๋ง ํŽธ๋ฆฌํ•˜๊ฒ ์ง€? ๐Ÿ˜‰

fscanf๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด. ๋ฐ”๋กœ ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ์•ผ. fscanf๋Š” ํŒŒ์ผ์˜ ๋์— ๋„๋‹ฌํ•˜๋ฉด EOF(End of File)๋ฅผ ๋ฐ˜ํ™˜ํ•ด. ๊ทธ๋ž˜์„œ ๋ณดํ†ต while ๋ฃจํ”„์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์„œ ํŒŒ์ผ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ฝ์–ด์˜ค๊ณค ํ•ด.

fscanf ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ fscanf ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ ํ”„๋กœ๊ทธ๋žจ fscanf(file, "ํ˜•์‹", &๋ณ€์ˆ˜); ํŒŒ์ผ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ์ฝ๊ธฐ ์™„๋ฃŒ ์‹ ํ˜ธ

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด fscanf ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ํ”„๋กœ๊ทธ๋žจ์—์„œ fscanf ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์ง€์ •๋œ ํ˜•์‹์— ๋งž์ถฐ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€. ๊ทธ๋ฆฌ๊ณ  ์ฝ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋‹ค์‹œ ์ „๋‹ฌ๋˜๋Š” ๊ฑฐ์ง€. ์ด๋Ÿฐ ๊ณผ์ •์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์–ด! ๐Ÿ‘

fscanf ํ•จ์ˆ˜๋Š” ํŒŒ์ผ ์ž…์ถœ๋ ฅ์—์„œ ์ •๋ง ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ด. ์ด ํ•จ์ˆ˜๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ถˆ๋Ÿฌ์™€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด, ๊ฑฐ๋ž˜ ๋‚ด์—ญ, ๋ฆฌ๋ทฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์—์„œ ์ฝ์–ด์™€ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ๋ถ„์„ํ•˜๋Š” ๋ฐ ์ด ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ.

ํ•˜์ง€๋งŒ fscanf๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด:

  1. ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ: fscanf๋Š” ์ž…๋ ฅ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š์•„์„œ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด fgets์™€ sscanf๋ฅผ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ์–ด.
  2. ํ˜•์‹ ๋ถˆ์ผ์น˜: ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์˜ˆ์ƒํ•œ ํ˜•์‹๊ณผ ๋‹ค๋ฅด๋ฉด ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์–ด. ํ•ญ์ƒ ํŒŒ์ผ์˜ ํ˜•์‹์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ด.
  3. ์—๋Ÿฌ ์ฒ˜๋ฆฌ: fscanf์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ํ™•์ธํ•ด์„œ ์ œ๋Œ€๋กœ ์ฝ์–ด์™”๋Š”์ง€ ํ•ญ์ƒ ์ฒดํฌํ•ด์•ผ ํ•ด.

์ž, ์ด์ œ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ๋ฐฐ์› ์–ด. ์ด๊ฑธ๋กœ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์˜ ๊ธฐ๋ณธ์€ ๊ฑฐ์˜ ๋‹ค ๋ฐฐ์šด ๊ฑฐ๋‚˜ ๋‹ค๋ฆ„์—†์–ด! ํ•˜์ง€๋งŒ ์•„์ง ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ฒŒ ๋‚จ์•˜์–ด. ๋ฐ”๋กœ ํŒŒ์ผ์„ ๋‹ซ๋Š” ๊ฑฐ์ง€. ๊ทธ๋ž˜์„œ ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” fclose ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์•ผ. ๊ณ„์† ๋”ฐ๋ผ์™€์ค˜! ๐Ÿƒโ€โ™‚๏ธ๐Ÿƒโ€โ™€๏ธ

4. fclose ํ•จ์ˆ˜: ํŒŒ์ผ ์ž‘์—… ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ ๐Ÿšช

์ž, ์ด์ œ ํŒŒ์ผ์„ ์—ด๊ณ , ์“ฐ๊ณ , ์ฝ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ๋ฐฐ์› ์–ด. ํ•˜์ง€๋งŒ ์•„์ง ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ฒŒ ๋‚จ์•˜์–ด. ๋ฐ”๋กœ ํŒŒ์ผ์„ ๋‹ซ๋Š” ๊ฑฐ์•ผ! ์—ฌ๊ธฐ์„œ ๋“ฑ์žฅํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ fclose ํ•จ์ˆ˜์•ผ.

fclose ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์–ด:

int fclose(FILE *stream);

์—ฌ๊ธฐ์„œ stream์€ fopen์œผ๋กœ ์—ด์–ด๋‘” ํŒŒ์ผ ํฌ์ธํ„ฐ์•ผ. fclose ํ•จ์ˆ˜๋Š” ํŒŒ์ผ ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ํŒŒ์ผ๊ณผ ๊ด€๋ จ๋œ ์‹œ์Šคํ…œ ์ž์›์„ ํ•ด์ œํ•ด์ค˜.

fclose ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ •๋ง ๊ฐ„๋‹จํ•ด:

FILE *file = fopen("example.txt", "r");
if (file == NULL) {
    printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
    return 1;
}

// ํŒŒ์ผ ์ž‘์—… ์ˆ˜ํ–‰...

fclose(file);  // ํŒŒ์ผ ๋‹ซ๊ธฐ

fclose ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์™œ ์ค‘์š”ํ• ๊นŒ? ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์–ด:

  1. ์ž์› ๊ด€๋ฆฌ: ์šด์˜ ์ฒด์ œ๋Š” ์—ด๋ฆฐ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ธฐํƒ€ ์ž์›์„ ํ• ๋‹นํ•ด. fclose๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ด๋Ÿฐ ์ž์›๋“ค์ด ํ•ด์ œ๋ผ.
  2. ๋ฐ์ดํ„ฐ ์•ˆ์ „์„ฑ: ํŒŒ์ผ์— ์“ฐ๊ธฐ ์ž‘์—…์„ ํ•œ ๊ฒฝ์šฐ, fclose๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฒ„ํผ์— ๋‚จ์•„์žˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ํŒŒ์ผ์— ์“ฐ์—ฌ์ ธ.
  3. ํŒŒ์ผ ์ž ๊ธˆ ํ•ด์ œ: ์ผ๋ถ€ ์‹œ์Šคํ…œ์—์„œ๋Š” ์—ด๋ฆฐ ํŒŒ์ผ์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ๊ฑธ์–ด. fclose๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ด ์ž ๊ธˆ์ด ํ•ด์ œ๋ผ.
  4. ํŒŒ์ผ ํ•ธ๋“ค ์ œํ•œ: ์šด์˜ ์ฒด์ œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์—ด ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•ด. fclose๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์žˆ๋Š” ์—ฌ์œ ๊ฐ€ ์ƒ๊ฒจ.

๐Ÿ’ก Pro Tip: ํ•ญ์ƒ ํŒŒ์ผ ์ž‘์—…์ด ๋๋‚˜๋ฉด fclose๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๋Š” ๊ฒŒ ์ข‹์•„. ํŠนํžˆ ํ”„๋กœ๊ทธ๋žจ์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋”์šฑ ์ค‘์š”ํ•ด. try-finally ๊ตฌ๋ฌธ์ด๋‚˜ RAII(Resource Acquisition Is Initialization) ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์–ด!

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ fclose์˜ ์ค‘์š”์„ฑ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณผ๊นŒ? ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ณด์ž:

void save_user_info(const char* username, int age, const char* talent) {
    FILE *file = fopen("users.txt", "a");
    if (file == NULL) {
        printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
        return;
    }

    fprintf(file, "์ด๋ฆ„: %s, ๋‚˜์ด: %d, ์žฌ๋Šฅ: %s\n", username, age, talent);

    if (fclose(file) != 0) {
        printf("ํŒŒ์ผ์„ ๋‹ซ๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค!\n");
    }
}

// ์‚ฌ์šฉ ์˜ˆ
save_user_info("๊น€์ฒ ์ˆ˜", 25, "ํ”„๋กœ๊ทธ๋ž˜๋ฐ");
save_user_info("์ด์˜ํฌ", 30, "๋””์ž์ธ");

์ด ์˜ˆ์ œ์—์„œ fclose๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ? ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ‘์ž๊ธฐ ์ข…๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์ œ๋Œ€๋กœ ์ €์žฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด. ๋˜ํ•œ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์—ฐ์†ํ•ด์„œ ์ €์žฅํ•  ๋•Œ, ํŒŒ์ผ ํ•ธ๋“ค์ด ๋ถ€์กฑํ•ด์งˆ ์ˆ˜๋„ ์žˆ์ง€. ๊ทธ๋ž˜์„œ fclose๋Š” ์ •๋ง ์ค‘์š”ํ•ด! ๐Ÿ˜Š

fclose ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ fclose ํ•จ์ˆ˜ ์ž‘๋™ ๋ฐฉ์‹ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ fclose(file) ์ž์› ํ•ด์ œ ์™„๋ฃŒ

์ด ๊ทธ๋ฆผ์„ ๋ณด๋ฉด fclose ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ํ”„๋กœ๊ทธ๋žจ์—์„œ fclose ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์šด์˜์ฒด์ œ์— ํŒŒ์ผ ๋‹ซ๊ธฐ๋ฅผ ์š”์ฒญํ•ด. ๊ทธ๋Ÿฌ๋ฉด ์šด์˜์ฒด์ œ๋Š” ํ•ด๋‹น ํŒŒ์ผ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ž์›์„ ํ•ด์ œํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์— ์•Œ๋ ค์ค˜. ์ด๋ ‡๊ฒŒ ํ•ด์„œ ํŒŒ์ผ ์ž‘์—…์ด ๊น”๋”ํ•˜๊ฒŒ ๋งˆ๋ฌด๋ฆฌ๋˜๋Š” ๊ฑฐ์ง€! ๐Ÿ‘

fclose ํ•จ์ˆ˜๋Š” ํŒŒ์ผ ์ž…์ถœ๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์•ผ. ์ด ํ•จ์ˆ˜๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์–ด. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ๋Š” ์ˆ˜๋งŽ์€ ํŒŒ์ผ ์ž‘์—…์ด ์ด๋ฃจ์–ด์งˆ ํ…๋ฐ, ๋ชจ๋“  ์ž‘์—… ํ›„์— fclose๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด ์‹œ์Šคํ…œ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€?

์ž, ์ด์ œ ์šฐ๋ฆฌ๋Š” C์–ธ์–ด์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ๋ฐฐ์› ์–ด! fopen์œผ๋กœ ํŒŒ์ผ์„ ์—ด๊ณ , fprintf๋กœ ํŒŒ์ผ์— ์“ฐ๊ณ , fscanf๋กœ ํŒŒ์ผ์—์„œ ์ฝ๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ fclose๋กœ ํŒŒ์ผ์„ ๋‹ซ๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€. ์ด ๋ชจ๋“  ๊ณผ์ •์„ ๋งˆ์Šคํ„ฐํ–ˆ๋‹ค๋ฉด, ์ด์ œ ๋‹น์‹ ์€ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์˜ ๋‹ฌ์ธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด! ๐Ÿ†

์ด ์ง€์‹์„ ํ™œ์šฉํ•˜๋ฉด ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ด€๋ฆฌ, ๊ฑฐ๋ž˜ ๋‚ด์—ญ ๊ธฐ๋ก, ๋ฆฌ๋ทฐ ์ €์žฅ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ. ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด๋ฉด์„œ ๋” ๊นŠ์ด ์žˆ๋Š” ์ดํ•ด๋ฅผ ํ•ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ? ํ™”์ดํŒ…! ๐Ÿ’ช๐Ÿ˜„

๐ŸŒŸ ์ด์ •๋ฆฌ: C์–ธ์–ด ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ๐ŸŒŸ

์ž, ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๋‚ด์šฉ์„ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด๋ณผ๊นŒ? C์–ธ์–ด์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์€ ํฌ๊ฒŒ ๋„ค ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ:

  1. fopen: ํŒŒ์ผ์„ ์—ด์–ด ์ž‘์—…ํ•  ์ค€๋น„๋ฅผ ํ•ด.
  2. fprintf: ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์จ.
  3. fscanf: ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€.
  4. fclose: ํŒŒ์ผ ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ์ž์›์„ ํ•ด์ œํ•ด.

์ด ๋„ค ๊ฐ€์ง€ ํ•จ์ˆ˜๋งŒ ์ž˜ ํ™œ์šฉํ•ด๋„ ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด. ํ•˜์ง€๋งŒ ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๋” ๋งŽ์€ ์ƒํ™ฉ๊ณผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋  ๊ฑฐ์•ผ. ๊ทธ๋Ÿด ๋•Œ๋งˆ๋‹ค ์ด ๊ธฐ๋ณธ์„ ๋– ์˜ฌ๋ฆฌ๋ฉด์„œ, ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค(fgets, fputs, fseek ๋“ฑ)๋„ ์ฐพ์•„๋ณด๊ณ  ํ™œ์šฉํ•ด๋ณด๋ฉด ์ข‹์•„.

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์„ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ด๋Ÿฐ ์‹์œผ๋กœ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ:

// ์‚ฌ์šฉ์ž ์ •๋ณด ์ €์žฅํ•˜๊ธฐ
void save_user(const char* username, int age, const char* talent) {
    FILE *file = fopen("users.txt", "a");
    if (file == NULL) {
        printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
        return;
    }
    fprintf(file, "%s,%d,%s\n", username, age, talent);
    fclose(file);
}

// ์‚ฌ์šฉ์ž ์ •๋ณด ์ฝ์–ด์˜ค๊ธฐ
void load_users() {
    FILE *file = fopen("users.txt", "r");
    if (file == NULL) {
        printf("ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!\n");
        return;
    }
    char username[50], talent[50];
    int age;
    while (fscanf(file, "%[^,],%d,%[^\n]\n", username, &age, talent) == 3) {
        printf("์ด๋ฆ„: %s, ๋‚˜์ด: %d, ์žฌ๋Šฅ: %s\n", username, age, talent);
    }
    fclose(file);
}

// ๋ฉ”์ธ ํ•จ์ˆ˜
int main() {
    save_user("๊น€์ฒ ์ˆ˜", 25, "ํ”„๋กœ๊ทธ๋ž˜๋ฐ");
    save_user("์ด์˜ํฌ", 30, "๋””์ž์ธ");
    
    printf("๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž ๋ชฉ๋ก:\n");
    load_users();
    
    return 0;
}

์ด๋Ÿฐ ์‹์œผ๋กœ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์„ ํ™œ์šฉํ•˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜๊ฒ ์ง€? ์ด๊ฒŒ ๋ฐ”๋กœ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์˜ ๊ฐ•๋ ฅํ•œ ์ ์ด์•ผ! ๐Ÿš€

๊ธฐ์–ตํ•ด์•ผ ํ•  ํ•ต์‹ฌ ํฌ์ธํŠธ:

  • ํ•ญ์ƒ ํŒŒ์ผ ์—ด๊ธฐ์— ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์ž.
  • ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ ํŒŒ์ผ์„ ๋‹ซ์ž.
  • ํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์‹œ ํ˜•์‹์— ์ฃผ์˜ํ•˜์ž.
  • ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•ญ์ƒ ๊ณ ๋ คํ•˜์ž.

ํŒŒ์ผ ์ž…์ถœ๋ ฅ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ •๋ง ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด์•ผ. ์ด๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ง€. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์ด ์ง€์‹์ด ํฐ ๋„์›€์ด ๋  ๊ฑฐ์•ผ. ๊ณ„์† ์—ฐ์Šตํ•˜๊ณ  ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด๋ฉด์„œ ์‹ค๋ ฅ์„ ํ‚ค์›Œ๋‚˜๊ฐ€๊ธธ ๋ฐ”๋ผ! ๐Ÿ‘๐Ÿ˜„

์ž, ์ด์ œ ๋‹น์‹ ์€ C์–ธ์–ด ํŒŒ์ผ ์ž…์ถœ๋ ฅ์˜ ๋‹ฌ์ธ์ด ๋˜์—ˆ์–ด! ์ด ์ง€์‹์„ ํ™œ์šฉํ•ด ๋ฉ‹์ง„ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ? ํ™”์ดํŒ…! ๐ŸŽ‰๐Ÿš€