#include? Lt; Stdio.hgt;;
#include? Lt; Cstdlibgt;;
#include? Lt; Cstdiogt;;
#include? Lt; Cstringgt;;
#define? THIS_YEAR? 2012
Struct? DataLink? /*? 연결된 목록으로 데이터를 저장하시겠습니까? */
{char? Country [20]; -응? /*? 국가명? */ int? Count;; /*? 선수 수? */ int? SumAge;; /*? 운동선수의 총 나이? */ DataLink*? Next;;
}
Struct? DataLink*? Head=NULL;;
Int? Addata (char * country, int? 연도);
Int? Delaldata ();
Int? Readfile (파일 * FP);
Int? Writefile (file * FP);
Int? 메인 (void)? {파일 *? Infile;; -응? /*? 입력도 파일에서 가져오죠? -응? */파일 *? Outfile;; 인파일? =? Fopen("input.txt ","r "); Outfile? =? Fopen("output.txt ","w "); If? (infile? = =? NULL) {perror("fopen? 인파일? Failed "); 리튼? EXIT_FAILURE;; } if? -아웃파일? = =? NULL) {perror("fopen? Outfile? Failed "); 리튼? EXIT_FAILURE;; } fprintf(stdout, "country? |? Num? Of? Athletes? |? 에이버? 에이지? | \ n "); Readfile (infile); Writefile (outfile); Delaldata (); -응? /*? 공간을 확보하지 않으면 메모리 누수가 발생합니까? */ //more? 코드? Needed fclose (outfile); Fclose (infile); 리튼? EXIT_SUCCESS;;
}
Int? ReadFile (? FILE*fp? )
{char? Name1[256], name2 [256]; -응? /*? 모든 데이터의 이름이 두 단어라고 확신하면 그렇게 할 수 있습니다. 그렇지 않으면 문제가 될까요? */ char? Country [256]; Int? 연도; Int? Retval = 0; Int? Count = 0; While (! Feof(fp)) {retVal? =? Fscanf(fp, "sssd", name1, name2, country, amp;; 연도); If(retVallt;; 4)
리튼? Count;; Count++;+; AddData(countr
Y, 연도); } return? Count;;
}
Int? WriteFile (? FILE*fp? )
{int? Count = 0; Struct? DataLink*? PTemp=Head;; Fprintf(fp, "country? |? Num? Of? Athletes? |? 에이버? 에이지? | \ n-------------- While(pTemp? ! =? NULL) {fprintf(fp, "s|d|d|\n", pTemp-gt;; Country, pTemp-gt;; Count, pTemp-gt;; Sumage/ptemp-gt; Count); Count++;+; Ptemp = ptemp-gt; Next;; } return? Count;;
}
Int? DelAllData()
{struct? DataLink*? PTemp=Head, * Plast = head; While(pTemp? ! =? NULL) {pTemp? =? PTemp-gt;; Next;; 삭제? PLast;; PLast? =? PTemp;; } return? 1;
}
Int? AddData (? Char*country, int? 연도? )
{struct? DataLink*? PTemp=Head, * Plast = head; While(pTemp! = null) {if (strcmp (ptemp-gt; Country, country)==0)? /*? 중복된 국가명? */ {
PTemp-gt;; SumAge? +=? (this _ year-year);
PTemp-gt;; Count++;+;
리튼? 1; } pTemp? =? PTemp-gt;; Next;; }/*? 여기까지 와서 이전에 같은 국가명을 찾지 못했는데 링크리스트 노드를 추가하시겠습니까? */ struct? DataLink*? PNew? =? 새? Struct? Datalink (); If? (pNew? = =? NULL) {return? 0; } pnew-gt; Count? =? 1; Strcpy (pnew-gt; Country, country); PNew-gt;; SumAge? =? (this _ year-year); PNew-gt;; 다음? =? NULL;; If(Head==NULL)? /*? 첫 번째 노드? */{헤드? =? PNew;; } else? /*? 이미 다른 노드가 있습니다. 끝에 꽂으세요? */{ptemp = head-gt; Next;; While(pTemp? ! =? NULL) {
PLast? =? PTemp;;
PTemp? =? PTemp-gt;; Next;; } Plast-gt; 다음? =? PNew;; } return? 1;