bidのプロフィール
- ベストアンサー数
- 0
- ベストアンサー率
- 0%
- お礼率
- 0%
- 登録日2013/05/09
- C言語のプログラムの流れについて
下に貼り付けたプログラムの流れを順番に教えて頂きたいです。 特にadd関数とinsert関数の中身の動きについてが分からないので教えていただきたいです。 (a,b,c,sentouなどの動きなど。) 参考にですが リスト構造を用いて、read関数で読み込んだ単語をアルファベット順にソートしてリストのセルに入れ、同じ単語はまとめてその単語と個数を順に表示するプログラムです。 1からの説明を要求して申し訳ありませんがよろしくお願いいたします。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> typedef struct moji{ char w[50]; int cnt; struct moji *next; }moji; int main(){ FILE *fp; char data[50]; moji *sentou; moji *p=NULL; if((sentou=(moji *)malloc(sizeof(moji)))==NULL){ printf("malloc error\n"); exit(1); } fp=fopen("tango.txt","r"); if((fp = fopen("tango.txt","r"))==NULL){ printf("can't open\n"); exit(1); } while(read(data,fp)){ add(data,sentou); } p=sentou->next; while(p != NULL){ printf("%s %d\n",p->w,p->cnt); free(p); p=p->next; } fclose(fp); return (0); } int read(char data[],FILE *fp){ /*1つの単語(連続したアルファベット)をdataに格納して、スペースで区切られたらそこで格納をやめ、値1を返す。再度単語を格納するときはdataを初期化し、再度1つの単語を取得する。ファイルの単語がなくなれば(EOFなら)0を返す関数read()*/ } void add(char data[],moji *sentou){ moji *a,*c; for(c=sentou;c!=NULL;c=c->next){ if(strcmp(c->w,data)==0){ c->cnt++; return; } if(strcmp(c->w,data)>0){ break; } else{ a=c; } } insert(a,c,data); } void insert(moji *a,moji *c,char data[]){ moji *b; if((b=(moji *)malloc(sizeof(moji)))==NULL){ printf("malloc error\n"); exit(1); } strcpy(b->w,data); b->cnt=1; a->next=b; b->next=c; }
- c言語のプログラミングについて教えてください!
コネクション型Soket通信のプログラミングについて教えてください。 空欄と打ってるところを教えてほしいです。かなり急ぎです! #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <stdio.h> #include <fcntl.h> #include <stdlib.h> #include <strings.h> #define PORT_NO 8001 void cliepro(int); /*メインルーチン(クライアント)*/ main(int argc, char **argv) { int sofd; /* ソケット記述子*/ struct hostent *shost; /* hostent構造体*/ struct sockaddr_in sv_addr; /* sockaddr_in構造体 */ /*ソケットの作成(TCP) 空欄 空欄 空欄 */ /*サーバのアドレスを取得 空欄 空欄 空欄 */ /*サーバのアドレスを設定*/ bzero((void *)&sv_addr,sizeof(sv_addr)); sv_addr.sin_family = AF_INET; sv_addr.sin_port = htons(PORT_NO); memcpy((void *)&sv_addr.sin_addr,(void *)shost->h_addr,shost->h_length); /*ソケットの接続要求 空欄 空欄 空欄 */ cliepro(sofd); close(sofd); exit(0); } /*処理ルーチン(クライアント)*/ void cliepro(int sofd) { int cc,nbyte, MAXRMSG; char smsg[100], rmsg[100]; MAXRMSG=sizeof(rmsg); bzero(rmsg, MAXRMSG); while(1){ printf("Enter string :"); fgets(smsg, sizeof(smsg), stdin); if(feof(stdin)) break; nbyte=strlen(smsg); if (send(sofd, smsg, nbyte, 0) < 0) { perror("send"); } else { cc=recv(sofd,rmsg,MAXRMSG,0); if(cc<0) perror("recv"); else { printf("%s",rmsg); bzero(rmsg,MAXRMSG); } } } }