[질문] [C언어] 반복문을 이용하여 여러파일 쓰는 방법 C초보잡니다.

kosicheol의 이미지

1000개의 값을 50개의값씩 20개의 파일로 나눠서 저장하려고 합니다.
일일이 코딩하면 노가다에 너무길어 질꺼 같아 이렇게 글을 올림니다.

fopen 함수원형을 보니까 FILE * fopen ( const char * filename, const char * mode );
이더군요...
const char * filename 이라면 문자상수라 변수나 for 문으로 안되는 건가요???

좋은 방법 있으면 알려주세요 !!~~~

관련 정보가 있는 도서나 웹페이지 등 알고계시면 거침없이 댓글 바랍니다.

netionics의 이미지

int main(void)
{
	int val[1000];
	int i, j;
	char filename[100];
	FILE *fp;
 
	for (i = 0; i < 1000; i++)
		val[i] = i;
 
	for (i = 0; i < 20; i++) {
		sprintf(filename, "kosicheol-%d", i);
		fp = fopen(filename, "w");
		if (!fp)
			continue;
		for (j = 0; j < 50; j++) 
			fprintf(fp, "%d\n", val[50 * i + j]);
		fclose(fp);
	}
	return 0;
}
 
 

:)

kosicheol의 이미지

댓글 감사합니다.
sprintf함수는 처음보내요
역시 공부는 좋은책으로 해야..........
-----------------------------------
세계정복하자!!!

익명 사용자의 이미지

if ( ! fp ) 가 아니라 if(fp)인듯한데... 아닌가요??

익명 사용자의 이미지

굉장히 오래 되었지만 더분에 도움 받아 갑니다 감사합니다.^^

klyx의 이미지

char *는 const char *로 자동으로 형변환이 됩니다.

kosicheol의 이미지

char* 이나 const char* 은 문자상수(?)라 초기화 하면
중간에 값을 바꿀수 없다고 책에서 본거 같습니다.
그러면 for문을 이용해서 중간에 값을 바꿀수 없다고 생각 했기에 질문 드렸습니다.


jick의 이미지

함수 prototype에서 const로 선언한 것은 "이 함수에 인자를 넘겨주면 함수 내부에서 바꾸지 않는 걸 보장해 줄께"라는 뜻입니다.

즉, fopen이 착한-_- 함수라면 다음과 같은 코드에서

char str[]="myfile.txt";
FILE *fp = fopen(str, "w");
printf("str is %s\n", str);

마지막에 "myfile.txt"가 반드시 찍힌다고 믿어도 됩니다.

사실 C는 사악하기 때문에, 저렇게 선언해 놓고 함수 안쪽에서 casting해서 바꾸면 막을 방법은 없습니다. 그러나 라이브러리 함수는 적어도 개념 충만한-_- 사람들이 만들었으니 그런 짓은 안할 거라고 믿고 쓸 수 있죠.

kosicheol의 이미지

casting해서 "myfile.txt"란 문자열을 for문을 사용하여
"myfile[0].txt"
"myfile[1].txt"
"myfile[2].txt"등 으로 바꿀 수 있다는 말인가요???

mg2000의 이미지

함수 헤더에서 const char *filename이라고 정의하고 있다는 얘기는 함수 내부에서 filename이라는

변수가 가리키고 있는 내용이 변경되지 않는다는 의미입니다.

함수내부에서 const 쓰인다는 의미이니까요.

함수바깥에서는 char*를 넘겨줘도 위에서 많은 분들이 말씀하신대로 const char *로 자동 형변환이

이루어집니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.