首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

文章编译的有关问题

2012-09-06 
文章编译的问题#includestdio.h#includemalloc.h#includestring.h#includeconio.h#includestdlib

文章编译的问题
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define INITSIZE 1000
typedef struct HString
{  
char *data;
  int length;
}HString;
   
void Greatarticle() //创建文章
{  
  HString *L;
  L=(HString *)malloc(sizeof(HString));
  FILE *fp=NULL;
  char DataFile[40];
  printf("输入文件名:\n");
  gets(DataFile);
  while(*DataFile=='\0')
  {
printf("文件名不正确,请从新输入:");
  gets(DataFile);
  }
  fp=fopen(DataFile,"wb+");
  if(fp==NULL)
  {
printf("文件打开失败,按任意键结束!\n");
getch();
exit(1);
  }
  printf("创建文章:\n");
  L->data=(char *)malloc(INITSIZE*sizeof(char));
  gets(L->data);
  if(fwrite(L,sizeof(HString),1,fp)!=1)
  {
  printf("写入失败,按任意键结束!\n");
getch();
exit(1);
  }
  fclose(fp);
}
void OutArticle() //输出文章
{
  HString *L;
  L=(HString *)malloc(sizeof(HString));
  int i=0;
  char c;
  FILE *fp=NULL;
  char DataFile[40];
  printf("输入文件名:\n");
  gets(DataFile);
  while(*DataFile=='\0')
  {
printf("文件名不正确,请从新输入:");
  gets(DataFile);
  }
  fp=fopen(DataFile,"rb+");
  if(fp==NULL)
  {
printf("文件打开失败,按任意键结束!\n");
getch();
exit(1);
  }
 
  if(fread(L,sizeof(HString),1,fp)!=1)
  {
  printf("读出失败,按任意键结束!\n");
getch();
exit(1);
  }
  fclose(fp);
  //printf("%c",*(L->data));
  printf("文章显示:");
  while(*(L->data+i)!='\0')
  {
  c=*(L->data+i);
  if(i%80==0) 
{
printf("\n");
printf("%c",c);
}  
  else 
  printf("%c",c);
  i++;
  }
  printf("\n");
}

void Statistic() //文章统计
{  
HString *L;
L=(HString *)malloc(sizeof(HString));
  int i=0;
  int all=0,word=0,number=0,blank=0,other=0;
  char c;
FILE *fp=NULL;
  char DataFile[40];
  printf("输入文件名:\n");
  gets(DataFile);
  while(*DataFile=='\0')
{
printf("文件名不正确,请从新输入:");
  gets(DataFile);
  }
  fp=fopen(DataFile,"rb+");
  if(fp==NULL)
{
printf("文件打开失败,按任意键结束!\n");
getch();
exit(1);
}
  if(fread(L,sizeof(HString),1,fp)!=1)
  {
  printf("读出失败,按任意键结束!\n");
getch();
exit(1);
}
  while(*(L->data+i)!='\0')
  {
  c=*(L->data+i);
  all=all+1;
  if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
  word=word+1;
  else if(c>='0'&&c<='9')
  number=number+1;
  else if(c==32)
  blank=blank+1;
else 
  other=other+1;
  i++;
  }
  printf("字符个数:%d\n数字个数:%d\n空格个数:%d\n其他个数:%d\n文章总个数:%d\n",word,number,blank,other,i);
}


int menu()

int i;


  printf("\t\t----------1:创建文章----------\n");
printf("\t\t----------2:输出文章----------\n");
printf("\t\t----------3:文章统计----------\n");
printf("\t\t----------0:退出系统----------\n");
printf("功能选择:\n");
scanf("%d",&i);
fflush(stdin);
return(i);
}
void main()
{
  
  int j;
while(1)
{
  j=menu();
switch(j)
{
case 1:
Greatarticle();
  break;
  case 2:
  OutArticle();
break;
case 3:
  Statistic();
  break;
case 0:
  exit(0);
  default:
break;
}
printf("按任意键回到主菜单\n");
getch();
system("cls");
}
}

这个程序使用了文件 第一次执行时没有任何问题 当第二次执行输出里面已有的文件时
为何输出的是乱码啊!!!请教......




[解决办法]
输出文章的fread那里有问题,具体你仔细看吧

热点排行