모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_22266
    작성자 : 코린이막내
    추천 : 0
    조회수 : 884
    IP : 114.204.***.19
    댓글 : 2개
    등록시간 : 2018/04/07 16:38:02
    http://todayhumor.com/?programmer_22266 모바일
    C언어]안녕하세요.. 도움 부탁드립니다.
    안녕하세요 컴퓨터공학과 재학중인 학생입니다.
    컴퓨터 공학과 재학중임에도 c언어, 프로그래밍 전공분야에서 적성과 맞지않아 애를 많이먹고있습니다...

    최근 자료구조과목을 이수하면서 교수님께서 과제를 내주셨습니다.
    수업도 열심히듣고있고, 과제해결을 하기위해 책도 여러번읽고 구글 네이버도 뒤져가며 열심히 하고있지만
    좀처럼 쉽지가 않습니다... 기초가 부족해서인지 참 어렵기만 하네요.

    그래서 이렇게 도움을 요청하고자 글을 쓰게 되었습니다.
    다는 못드리겠지만, 괜찮으시다면 도움주신분 한분께 사례의 의미로 카페 기프티콘 보내드리겠습니다.

    배열을 이용한 리스트 ADT에서의 라인에디터 프로그램 코드입니다.
    다음 프로그램을 실행하다 보면 정상작동 하기까지 오류가 발생하는것들이 꽤나 있습니다.
    그 것을 5가지정도 발견해서 고쳐오는것이 과제인데요,
    제가 고친것은 최초 입력단계에서 입력되지않아 fflush함수 앞에 getchar함수로 널문자를 빼서 입력받을수 있게 하는것 정도였습니다.

    라인에디터에서 1번행으로 바로 삽입했을때 출력되지 않는 현상도 있었고,
    파일입력을 했을 경우에도 출력되지 않았습니다.

    어떤 부분을 어떻게 고치면 될까요.. 또 c언어는 도대체 어떻게 공부해야 잘 할 수 있는걸까요.
    전공에 대한 고민이 참 많아지네요.. 도움 부탁드립니다.

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>

    #define MAX_CHAR_PER_LINE 1000
    #define MAX_CHAR_PER_LINE 1000
    #define MAX_NAME 256
    void warning(char *);
    void error(char *);

    #define FALSE 0
    #define TRUE 1

    typedef struct {
    char a[MAX_CHAR_PER_LINE];
    } element;
    typedef struct ListNode {
    element data;
    struct ListNode *link;
    } ListNode;
    typedef struct {
    ListNode *head;
    int length;
    } ListType;

    void insert_node(ListNode **phead, ListNode *p,
    ListNode *new_node)
    {
    if (*phead == NULL) {
    new_node->link = NULL;
    *phead = new_node;
    }
    else if (p == NULL) {
    new_node->link = *phead;
    *phead = new_node;
    }
    else {
    new_node->link = p->link;
    p->link = new_node;
    }
    }

    void remove_node(ListNode **phead, ListNode *p, ListNode *removed)
    {
    if (p == NULL)
    *phead = (*phead)->link;
    else
    p->link = removed->link;
    free(removed);
    }

    void init(ListType *list)
    {
    if (list == NULL) return;
    list->length = 0;
    list->head = NULL;
    }

    ListNode *get_node_at(ListType *list, int pos)
    {
    int i;
    ListNode *tmp_node = list->head;
    if (pos < 0) return NULL;
    for (i = 0; i<pos; i++)
    tmp_node = tmp_node->link;
    return tmp_node;
    }

    int get_length(ListType *list)
    {
    return list->length;
    }


    void add(ListType *list, int position, element data)
    {
    ListNode *p;
    if ((position >= 0) && (position <= list->length)) {
    ListNode*node = (ListNode *)malloc(sizeof(ListNode));
    if (node == NULL) error("메모리 할당에러");
    node->data = data;
    p = get_node_at(list, position - 1);
    insert_node(&(list->head), p, node);
    list->length++;
    }
    }

    void add_last(ListType *list, element data)
    {
    add(list, get_length(list), data);
    }

    void add_first(ListType *list, element data)
    {
    add(list, 0, data);
    }

    int is_empty(ListType *list)
    {
    if (list->head == NULL) return 1;
    else return 0;
    }

    void delete(ListType *list, int pos)
    {
    if (!is_empty(list) && (pos >= 0) && (pos < list->length)) {
    ListNode *p = get_node_at(list, pos - 1);
    remove_node(&(list->head), p, (p != NULL) ? p->link : NULL);
    list->length--;
    }
    }

    element get_entry(ListType *list, int pos)
    {
    ListNode *p;
    if (pos >= list->length) error("위치 오류");
    p = get_node_at(list, pos);
    return p->data;
    }

    void clear(ListType *list)
    {
    int i;
    for (i = 0;i<list->length;i++)
    delete(list, i);
    }

    void display(ListType *buffer)
    {
    int i;
    ListNode *tmp_node;
    tmp_node = buffer->head;

    printf("**************\n");
    for (i = 0;i<buffer->length;i++) {
    printf("%s", tmp_node->data.a);
    tmp_node = tmp_node->link;
    }
    printf("**************\n");
    }

    void warning(char *message)
    {
    fprintf(stderr, "%s\n", message);
    }

    void error(char *message)
    {
    fprintf(stderr, "%s\n", message);
    exit(1);
    }

    void help()
    {
    printf("**************\n");
    printf("i: 입력\n");
    printf("d: 삭제\n");
    printf("r: 파일읽기\n");
    printf("w: 파일쓰기\n");
    printf("q: 종료\n");
    printf("**************\n");
    }

    void read_file(ListType *buffer)
    {
    char fname[MAX_NAME];
    FILE *fd;
    element p;

    if (!is_empty(buffer)) {
    clear(buffer);
    }
    init(buffer);

    printf("파일 이름: ");
    scanf("%s", fname);
    if ((fd = fopen(fname, "r")) == NULL) {
    warning("파일을 열수없습니다.");
    return;
    }
    while (fgets(p.a, MAX_CHAR_PER_LINE, fd)) {
    add_last(buffer, p);
    }
    fclose(fd);
    display(buffer);
    }

    void write_file(ListType *buffer)
    {
    FILE *fd;
    char fname[MAX_NAME];
    element p;
    int i;

    printf("파일 이름: ");
    scanf("%s", fname);
    if ((fd = fopen(fname, "w")) == NULL) {
    printf("파일을 열수없습니다.\n");
    return;
    }
    for (i = 0;i<get_length(buffer);i++) {
    p = get_entry(buffer, i);
    fputs(p.a, fd);
    }
    fclose(fd);
    display(buffer);
    }

    void delete_line(ListType *buffer)
    {
    int position;

    if (is_empty(buffer))
    printf("지울 라인이 없습니다.\n");
    else
    {
    printf("지우고 싶은 라인번호를 입력하세요:\n");
    scanf("%d", &position);
    delete(buffer, position);
    }
    display(buffer);
    }

    {
    int position;
    char line[MAX_CHAR_PER_LINE];
    element p;

    printf("입력행번호를 입력하세요: \n");
    scanf("%d", &position);

    printf("내용을 입력하세요: ");
    fflush(stdin);
    fgets(line, MAX_CHAR_PER_LINE, stdin);
    strcpy(p.a, line);
    add(buffer, position, p);
    display(buffer);
    }

    void do_command(ListType *buffer, char command)
    {
    switch (command)
    {
    case 'd':
    delete_line(buffer);
    break;
    case 'i':
    insert_line(buffer);
    break;
    case 'r':
    read_file(buffer);
    break;
    case 'w':
    write_file(buffer);
    break;
    case 'q':
    break;
    }
    }

    void main()
    {
    char command;
    ListType buffer;

    init(&buffer);
    do {
    help();
    command = getchar();
    do_command(&buffer, command);
    fflush(stdin);
    } while (command != 'q');
    }


    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    22271
    [본삭금]우분투 setUID 프로그램을 통해 접근이 제한된 파일 접근 [2] 본인삭제금지 fsaas 18/04/08 20:00 455 0
    22269
    [자바웹] Spring에서 사용중인 세션을 볼 수 있나요? [4] 베스트금지본인삭제금지 쉬룐 18/04/08 10:52 739 0
    22268
    IntelliJ SW Pycharm 파이참 설치 질문합니다 :) [2] 말랑말랑몰랑 18/04/08 02:07 455 0
    22267
    공무원시험 그만두고, 국비지원 다니려합니다. [12] 웃대메템 18/04/07 22:16 1965 0
    C언어]안녕하세요.. 도움 부탁드립니다. [2] 코린이막내 18/04/07 16:38 885 0
    22265
    nodeJS 질문] sync 관련 [2] 본인삭제금지 18/04/07 15:11 495 0
    22264
    본삭금]프로그램 언어 관련은 아니지만 운영체제에 관해 질문... [2] 본인삭제금지 rukiyein 18/04/07 08:54 528 0
    22263
    아 진짜 스크래치 모르겠어요ㅜㅜ 도와주세요ㅠㅠ [4] 본인삭제금지 을지문덕 18/04/06 18:11 639 0
    22262
    JAVA에서 String을 Generic 타입으로 어떻게 캐스팅하나요 ㅠ [7] 첫댓평생솔로 18/04/06 16:46 829 0
    22261
    C++ 2차 백터 반전함수를 어떻게 짤까요? [1] 한시운 18/04/06 16:38 652 0
    22260
    c++] 이런 유형의 코드가.. 어떤 구조로 이루어져 있을까요? [2] 본인삭제금지 훗날닭집사장 18/04/05 17:26 671 0
    22259
    몇년차에 설계하고 개발할 수 있을까요..? [7] 외부펌금지 배고파돼지겠다 18/04/05 11:16 886 0
    22258
    이미지 안의 텍스트 배치 (CSS3) [5] 본인삭제금지 프나무 18/04/04 16:07 708 0
    22257
    본삭금] spring struts ibatis hibernate 공부ㅠㅠ [3] 본인삭제금지외부펌금지 abab 18/04/04 15:36 508 0
    22256
    저기 질문할게 있는데요. [7] 퍀키지겜 18/04/04 02:55 640 0
    22255
    저번 3월6일부터 하루에 거의 10시간 공부하고 있습니다. [4] 퍀키지겜 18/04/04 02:53 905 0
    22254
    웹브라우저마다 팝업이 뜰때 각각 설치해야하는 이유는 무엇인가요? [1] 본인삭제금지 두부두부둡둡 18/04/02 23:38 529 0
    22253
    [asp.net] 파일 업로드 구현시 성능 문의 드립니다. [4] 본인삭제금지외부펌금지 뿌라라라 18/04/02 21:49 703 0
    22250
    c문제 하나만 도와주세요 ㅠㅠ [7] hazelnuts 18/03/31 22:31 847 0
    22249
    하아... 왜 서버에 접속이 안되니.. [1] 블로블로그 18/03/31 19:08 476 0
    22248
    C언어 부호가 있는 정수의 표현 범위 이해한게 맞는지 질문드립니다! [2] 본인삭제금지 쿠쿠크크섬 18/03/31 19:03 539 0
    22247
    원격 리눅스 서버 컴퓨터에 파일 업로드 다운로드 어떻게 하나요? [7] 블로블로그 18/03/30 19:57 672 0
    22246
    본삭금) JavaScript csv파일 다운 경로 질문있습니다. [7] 본인삭제금지 지포군 18/03/30 16:06 619 0
    22245
    퇴사합니다 [3] JSP때려침 18/03/30 14:52 1154 8
    22244
    아오 니가 와서 쿼리짜서 처리하든가 [2] 아오리소라 18/03/30 11:25 825 2
    22243
    Mfc 독학중인데 막혓습니다 ㅠㅠ 도와주세요! [2] 베스트금지본인삭제금지 아니네가 18/03/30 11:25 817 0
    22242
    안드로이드 어플 개발 중 생전 처음 겪어보는 오류.. [3] 창작글본인삭제금지 Bluewarn 18/03/29 21:16 662 0
    22241
    서버 개발자 연봉은 대충 어느 정도 될까요? [5] 베스트금지베오베금지 MioLiquid 18/03/29 15:56 3744 0
    22240
    iis웹서버 공부하고 있는데 기초적인 질문드려도 아시는분 답변부탁드려요 [2] tlsehfla 18/03/29 09:47 471 0
    22239
    나는 후회하지 않기로 했다. [5] 아잉이따이요 18/03/28 23:15 698 1
    [◀이전10개] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈