#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int element;
typedef struct temp{
element n;
char nm[10];
element k;
element e;
element m;
}temp;
typedef struct ListNode{
element num;
char name;
element kor;
element eng;
element mat;
struct ListNode *link;
}ListNode;
typedef struct{
ListNode *head;
int length;
}LinkedListType;
void error(char *message)
{
fprintf(stderr,"%s\n",message);
exit(1);
}
int is_empty(LinkedListType *list)
{
if(list->head==NULL)
return 1;
else
return 0;
}
void insert(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;
}
else
{
new_node->link =p->link;
p->link=new_node;
}
}
ListNode *get_node_at(LinkedListType *list,int pos)
{
int i;
ListNode *temp_node =list->head;
if(pos<0)
return NULL;
for(i=0;i<pos;i++)
temp_node=temp_node->link;
return temp_node;
}
void add(LinkedListType *list,int pos,element NUM, char *NAME,element KOR,element ENG,element MAT)
{
ListNode *p;
if((pos>=0)&&(pos<=list->length)){
ListNode*node=(ListNode *)malloc(sizeof(ListNode));
node->num=NUM;
node->name=*NAME;
node->kor=KOR;
node->eng=ENG;
node->mat=MAT;
p=get_node_at(list,pos-1);
insert(&(list->head),p,node);
list->length++;
}
}
void remove_node(ListNode **phead,ListNode *p,ListNode *removed)
{
if(p==NULL)
{
*phead=(*phead)->link;
}
else
p->link=removed->link;
free(removed);
}
void delete(LinkedListType *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--;
}
}
void clear(LinkedListType *list)
{
int i;
for(i=0;i<list->length;i++)
delete(list,i);
}
void init(LinkedListType *list)
{
if(list==NULL)return;
list->length =0;
list->head =NULL;
}
void display(LinkedListType *list)
{
int i;
ListNode *node=list->head;
for(i=0;i<list->length;i++)
{
printf("%d",node->num);
printf("%s",node->name);
node=node->link;
}
}
int main()
{
FILE *fp;
int i,cnt=0;
temp emp ;
LinkedListType list1;
init(&list1);
fp=fopen("data.txt","r");
if(fp==NULL)
{
printf("data를 읽어오지 못하였습니다");
return 0;
}
while(!feof(fp))
{
fscanf(fp,"%d %s %d %d %d",&emp.n,&emp.nm,&emp.k,&emp.e,&emp.m);
cnt++;
}
rewind(fp);
for(i=0;i<cnt;i++)
{
fscanf(fp,"%d %s %d %d %d",&emp.n,emp.nm,&emp.k,&emp.e,&emp.m);
add(&list1,i,emp.n,emp.nm,emp.k,emp.e,emp.m); /*이쪽 문자열부터 문제발생 ㅠㅠ
}
return 0;
}
-------------------------------------------------------------------------------------------------------
코드를 짜서 확인해 봤는데 add함수 라는 곳에 문자열 입력받는곳부터 계속 문제가 발생하는데 이유좀 알고 싶어요 ㅠㅠ
물어보고싶어도 아싸여서 물어볼사람이 없음 ㅜㅜㅜ
입력해서 가져오는 파일내용은 대략 이렇스빈다
20074241 카하타 50 90 95
20074242 가나다 80 95 85
20074243 라마바 70 60 95
20074244 사아자 50 30 65
나도 아싸생활좀 했지만 모르면 좆댐 아싸는 다 알아야 됨
리눅스에서 하나 이거
아뇨 c언어임 ㅜㅜㅜ
사용 운영체제를 물어봤는데, 사용언어를 답하는 당신은 ....
char에 왜 char *을 쳐넣으시려고 합니까 라고 컴파일러가 지랄할텐데
fscanf도 보나마나 못 읽어올테고
윈도우요 ㅜㅜ 지랄안함 ㅠㅠ 포인터 빼고도 해봄 ㅠㅠ
fges로 읽어야하나요? ㅠㅠ
add지우고 그 자리에 puts(emp.nm); 넣어보셈
아니 fgets
*name 은 char* 가 아니라 char 타입이라 컴파일러가 지랄안할거 같아.
글쓴이는 이유가 알고싶은게 아니고, 누군가 돌아가도록 수정하길 원하는거 아냐? 이유를 알고싶은데 저런식으로 짤리가... 소스코드 검증도 안해보고 질문쓰는거지?
읽어지긴 하는데 add함수쪽에선 ... 종범됨 ㅜㅠ
코드는 책에 있는 코드가 있는데 그걸 보고 코드를 짜는건데 ㅠㅠ 계속 다른방향으로 수정하면서 저도 노력중인데 잘안되서요ㅠㅠ
1. fscanf 가운데어서 %s 나오는 순간 뒷거는 전혀 못 쓴다. 2. add함수 아예 잘못 만들었다.
OR가 아니고 AND임
기본적인 베이스는 책에 나와있는데 그걸 교수님이 응용을 많이해서 문제를 내시는데 문자열부분은 제가 잘 몰라서 계속 수정하면서 하는데 잘안됨 ㅜㅜ
둘다 고치시오
넵 감사합니다 ㅜㅜ 역시 플맹갤성님들 ㅜㅜ
ㄴ 감사할것 없어. 돌겟dot 이 말한 내용은 엉터리야. 정말 해결하고 싶으면 소스라도 좀봐.. struct ListNode { ...char name ... }..
아 맞어 제일 중요한거 레노미나 훃이 알려줬네
아....배열....다른부분만 보고 있었는데 정말 감사합니다. 앞으로 혼자 할수 있도록 노력할게요
이런...다른부분은 안봐서 모르겠지만, 일단 배열만 틀린건 아닌거 같아. 문자열 복사하는 법도 알아봐.
fscanf는 아마 제대로 될거임. 시발 존나 옛날 컴파일러로 배워서 내가 잘못 알고 있는듯
것보다 함수이름이 delete인데 이게 되나?
ㄴ C 라잖아. C++ 이 아니고~
프갤 성님들 감사합니다 ㅜㅜ 아직 몇개 소스 추가로 넣어야 할게 있긴한데 그래도 성님들 덕에 새로운거 배우고 가네요 ㅠㅠ 문자열은 복사할려면 strcpy사용해야된다느거 알게됨 ㅜㅜ 정말감사합ㄴ디ㅏ