读书人

文章编译的有关问题

发布时间: 2012-09-06 10:37:01 作者: rapoo

文章编译的问题
#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那里有问题,具体你仔细看吧

读书人网 >C语言

热点推荐