기본적인건데 제가 잘 모르겠네요...;; 간단한거니까 다들 봐주시고 답변좀 주세요 ㅠ

jmonaco88의 이미지

 1  #include <stdio.h>
     2  #include <stdlib.h>
     3
     4  int main(int argc, char *argv[])
     5  {
     6          FILE *fp;
     7          char ch;
     8          long l;
     9
    10          if(argc != 2){
    11                  printf("You must specify the file\n");
    12                  exit(1);
    13          }
    14
    15          if((fp = fopen(argv[1], "rb")) == NULL){
    16                  printf("cannot open file");
    17                  exit(1);
    18          }
    19
    20          fseek(fp, 0, SEEK_END);
    21          l = ftell(fp);
    22
    23          fseek(fp, 0, SEEK_SET);
    24          for( ; l>=0; l = l - 2L){
    25                  ch = fgetc(fp);
    26                  putchar(ch);
    27                  fseek(fp, 1L, SEEK_CUR);
    28          }
    29
    30          fclose(fp);
    31
    32          return 0;
    33  }

소스내용은 간단합니다. 파일에있는 내용들을 홀수바이트 문자는 프린트해주고 짝수는 건너띄는 소스입니다.

근데 여기서 2L과 1L이 뭔지 도무지 모르겠네요 ;;;;

조언좀 부탁드립니다.

ymir의 이미지

integer constant suffix 로 검색해 보세요.

http://c0x.coding-guidelines.com/6.4.4.1.html

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

shint의 이미지

지저분하지만. 개발한 기록과 주석 모두 첨부합니다.

[%

//참고한 링크
//http://kldp.org/node/135343
//http://www.cplusplus.com/reference/cstdio/fgetc/
//http://www.cplusplus.com/reference/cstdio/fgets/
//http://cafe.naver.com/cafec/261386
//http://dragonseop.tistory.com/15
//http://cafe.naver.com/cafec/40790
//http://blog.naver.com/kjkchun4/110037219356
//http://sadohc.net/7
//http://itguru.tistory.com/51

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include
#include
#include
#include
#include
#include

#define MSVCR100

typedef struct DF_ST
{
char a;
char b;
char c;
char d;
}ST;

//#ifndef _FILE_DEFINED
//struct _iobuf {
// char *_ptr;
// int _cnt;
// char *_base;
// int _flag;
// int _file;
// int _charbuf;
// int _bufsiz;
// char *_tmpfname;
// };
//typedef struct _iobuf FILE;

char* fn_str(char* p, int cnt)
{
if(cnt == 0)
return NULL;

p[cnt] = '\0';
return p;
}

void fn_io(_iobuf* io)
{
// _iobuf* io;
// io = fp;

// printf("--------------------------------------------------------------------------\n");
// printf("[%c]\n", ch);
// printf("--------------------------------------------------------------------------\n");
printf("CNT:%d\t", io->_cnt);
printf("FLAG:%d\t", io->_flag);
printf("FILE:%d\t", io->_file);
printf("CHARBUF:%d\t", io->_charbuf);
printf("BUFSIZE:%d\t", io->_bufsiz);
printf("TMP_FNAME:%s\n", io->_tmpfname);
printf("PTR:\n%s \n", fn_str(io->_ptr, io->_cnt));
printf("\n");
printf("BASE:\n%s\n", io->_base);

printf("\n");
}

//http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10302&docId=64889941&qb=X2R1cCBpbw==&enc=utf8&section=kin&rank=1&search_sort=0&spq=0
//http://batt22.tistory.com/31
//http://yhcting.tistory.com/211
//http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/9c6ecc5f-2294-479d-8827-49068c3b1802
//http://blog.naver.com/gloryo?Redirect=Log&logNo=110118055436
//HANDLE GetFileHandleFromFILE(FILE* pFile)
//{
// DWORD offset = pFile->_file << 6;
// HANDLE handle = *(PHANDLE)(offset + __pioinfo);
// return handle;
//}

//해결방법은 STLport를 컴파일 할 때, fstream.cpp의 extern _CRTIMP ioinfo * __pioinfo; 이부분에
//서 extern을 제거한 후 컴파일을 하면 된다. 하지만 그 나름대로 문제가 또 있다. CMT를 써게 되는
//경우라면 또 원래의 .lib를 이용해야 하는 것이다. (아니 이런 귀차니즘이;;)
//다른 방법으로는 stl_user_config.h의 #define _STLP_NO_OWN_IOSTREAMS 1 의 주석을

int main(int argc, char *argv[])
{
FILE *fp;
char ch;
long l;
long max;

//http://madprog.tistory.com/33
//FILE str;
//REG1 FILE* infile = &str;

if(argc != 2)
{
printf("You must specify the file\n");
exit(1);
}

if((fp = fopen(argv[1], "rb")) == NULL)
{
printf("cannot open file");
exit(1);
}

//최대 파일 크기를 구한다.
fseek(fp, 0, SEEK_END);
max = ftell(fp);

//처음으로 이동한다.
fseek(fp, 0, SEEK_SET);

//for
//첫번째 인자 : 변수 초기화
//두번째 인자 : 조건문
//세번째 인자 : 증가값

//for( ; l>=0; l = l - 2L) 은

//for( ; l>=0; )
//{
// l = l - 2L; 과 같습니다.
//}

//int n = feof(fp);
//if(n != 0)
//{
// printf("\nfeof[%d]\n", n);
// break;
//}

printf("홀수 보여주기\n");
l = 0;
while(1)
{
ch = fgetc(fp);
printf("fgetc [%c]\n", ch);

l = l+2;
if(l >= max)
{
printf("\nend[%d]\n", l);
break;
}
fseek(fp, l, SEEK_SET);

Sleep(100);
}

//TEST_CODE
// printf("짝수만 보여주기\n")
// l = 1;
// char ca[10];
// memset(ca, '\0', 10);
// fseek(fp, l, SEEK_SET);
// while(1)
// {
//
// fn_io(fp);
//
// ch = fgetc(fp);
//// fread(&ch, 1, 1, fp);
//// fscanf(fp, &ch);
//// fputc(ch, stdout);
//// fgets(&ca[0], 10, fp);
//
// STDOUT_FILENO
//
// //http://yhcting.tistory.com/211
//// int fd = _dup(fileno(stdout));
//// _dup2(fd, fileno(stdout));
//
// printf("--------------------------------------------------------------------------\n");
//// fputc(ch, stdout);
//// printf("fgetc [%c]\n", &ca[0]);
// printf("fgetc [%c]\n", ch);
//// fputs(ch, fp); <-- stdout과 fp에 주의하자.
// printf("--------------------------------------------------------------------------\n");
//
//
//
// //http://blog.naver.com/gloryo?Redirect=Log&logNo=110118055436
//// HANDLE file = (HANDLE)fileno(fp);
//// char buffer[1024] = {0};
//// DWORD readBytes = 0;
//// ReadFile(file, buffer, sizeof(buffer), &readBytes, NULL);
//// printf("buffer : %s\n", buffer);
//// fclose(pFile);
//
//
// l = l+2;
// if(l >= max)
// {
// printf("\nend[%d]\n", l);
// break;
// }
// //http://blog.naver.com/cosmo1492?Redirect=Log&logNo=120121883721
// fseek(fp, l, SEEK_SET);
//
// Sleep(100);
// }

printf("짝수만 보여주기\n");
l = 1;
fseek(fp, l, SEEK_SET);
while(1)
{
ch = fgetc(fp);
fputc(ch, stdout); fputc('\n', stdout);
// printf("fgetc [%c]\n", ch);

l = l+2;
if(l >= max)
{
printf("\nend[%d]\n", l);
break;
}
fseek(fp, l, SEEK_SET);

Sleep(100);
}

printf("홀수만 거꾸로 보여주기\n");
l = max-1;
fseek(fp, l, SEEK_SET);
while(1)
{
ch = fgetc(fp);
// fputc(ch, stdout); fputc('\n', stdout);
printf("fgetc [%c] [pos:%d]\n", ch, l);

l = l-2;
if(l < 0)
{
printf("\nend[%d]\n", l);
break;
}

fseek(fp, l, SEEK_SET);

Sleep(100);
}

printf("짝수만 거꾸로 보여주기\n");
l = max-2;
fseek(fp, l, SEEK_SET);
while(1)
{
ch = fgetc(fp);
// fputc(ch, stdout); fputc('\n', stdout);
printf("fgetc [%c] [pos:%d]\n", ch, l);

l = l-2;
if(l < 0)
{
printf("\nend[%d]\n", l);
break;
}
fseek(fp, l, SEEK_SET);

Sleep(100);
}

return 0;

//12345
//67890
for( ; l>=0; ) //0일때까지 반복.
{
int n = feof(fp);
if(n != 0)
{
printf("feof[%d]\n", n);
break;
}

// l = l - 2L;
printf("\n-----%d\n", l);
ch = fgetc(fp);
// fputc(ch, stdout);
putchar(ch);

// int n;
// memcpy(&n, (void*)fgetc(fp), 4);
// fflush(fp);

// char c1;
// char c2;
// memcpy(&c1, &n, 1);
// memcpy(&c2, &n+1, 1);
// printf("%c\n", c1);
// printf("%c\n", c2);

// ST st;
// memcpy(&st, &n, 4);
//
// printf("%c\n", st.a);
// printf("%c\n", st.b);
// printf("%c\n", st.c);
// printf("%c\n", st.d);

// fseek(fp, l, SEEK_CUR);
}
fclose(fp);

return 0;
}

//
//출력 결과
//
//홀수 보여주기
//fgetc [1]
//fgetc [3]
//fgetc [5]
//fgetc [7]
//fgetc [9]
//
//end[10]
//짝수만 보여주기
//2
//4
//6
//8
//
//end[9]
//홀수만 거꾸로 보여주기
//fgetc [9] [pos:8]
//fgetc [7] [pos:6]
//fgetc [5] [pos:4]
//fgetc [3] [pos:2]
//fgetc [1] [pos:0]
//
//end[-2]
//짝수만 거꾸로 보여주기
//fgetc [8] [pos:7]
//fgetc [6] [pos:5]
//fgetc [4] [pos:3]
//fgetc [2] [pos:1]
//
//end[-1]

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

sooho1000의 이미지

파일 크기의 반만 출력하는 코드 같은데요? 홀수바이트만 출력하는게 아니라..

jmonaco88의 이미지

홀수번째만 출력이 되니까 짝수번째마다 출력되야하는게 날라가겠죠??

그러면 파일 크기의 반만 출력하는 코드라고 말해도 되는거죠~ 표현의 차이같네요 ㅎ

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.