求救````大家帮我看下这题 不胜感激

到百度贴吧首页
新闻   网页   贴吧   知道   MP3   图片   视频   百科
    吧内搜索 | 帮助

求救````大家帮我看下这题 不胜感激

1楼

题目:用windows的“记事本”程序输入字符,并保存为文本文件。编写程序计算这个文件中的英文,字数,汉字和其他字符个数。
(我不知道汉字怎么才能进行统计`````还有就是英文字母老统计不出来,请高手指教)
#include<stdio.h>
main()
{
 FILE *fp;
 long number=0;
 long zimu=0;
 long hanzi=0;
 long other=0;
 char ch;
 if((fp=fopen("text.txt","r"))==NULL)
 {
  printf("cannot open file!\n");
  exit(0);
 }
 while(!feof(fp))
 {ch=fgetc(fp);
  if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
   {zimu++;}
  else if(ch>='0'&&ch<='9')
   {number++;}
  else if(sizeof(ch)>128)
   {hanzi++;}
  else
   {other++;}
 }
 printf("number=%d zimu=%d hanzi=%d other=%d\n",number,zimu,hanzi,other);
 fclose(fp);
}

2楼

if(ch>='A'&&ch<='Z'¦¦ch>='a'&&ch<='z')
====
如果你不清楚运算的顺序,请加上括号。足够多的括号能减少很多不必要的麻烦。
至于中文,呵呵,怎么能用sizeof这样的运算符呢?好好看看书,sizeof是什么意思。
显然你的是作业,那么可以简单认为中文就是国标GB2312,即一个汉字是两个字节,与英文的差别在于这两个字节都是大于128的。

3楼

关于括号 具体加哪?我是按照书上写的输进去的``````还有就是汉字 能具体些?我是大1的 我们老师的书全是错误 因为不是这个专业 又必须完成任务 没有更多时间去学习这个 请斑竹多帮忙

4楼

在下初学 希望大家帮帮我

5楼

if((ch>='A'&&ch<='Z')¦¦(ch>='a'&&ch<='z'))

每次读入的字节如果大于等于128,就可以认为这个字节和下面一个字节组成了一个汉字
即 if(ch>=128) 

剩下的可以自己发挥了

6楼

#include<stdio.h>
main()
{
 FILE *fp;
 long number=0;
 long zimu=0;
 long hanzi=0;
 long other=0;
 char q;
 if((fp=fopen("text.txt","r"))==NULL)
 {
 printf("cannot open file!\n");
 exit(0);
 }
 while(!feof(fp))
 {q=fgetc(fp);
 if((q>='A'&&q<='Z')||(q>='a'&&q<='z'))
 {zimu++;} 
 else if(q>='0'&&q<='9')
 {number++;}
 else if(q>=128)
 {hanzi++;}
 else
 {other++;}
 }
 printf("number=%d zimu=%d hanzi=%d other=%d\n",number,zimu,hanzi,other);
 fclose(fp);
}

我按照你的改完了
我在文本里输入:a与1。
结果确是:number=1 zimu=0 hanzi=1 other=0
```为什么

210.77.4.*

7楼

char q;应该改为unsigned char q;因为你要与128以上的数值比较。另外
else if(q>=128)
{
 hanzi++;
 fgetc(fp);//因为汉字是两个字节。
}

210.77.4.*

8楼

或者不加这一句,
fgetc(fp);//因为汉字是两个字节。而是在最后把hanzi除以2,得到正确的汉字数目。

9楼

你们能把我这个复制到C程序运行下吗?``我按照你们的改完后结果都是一样的 不知道为什么

10楼

刚说的你没看到啊,一个汉字两个字节的,
else if(q>=128)
 {hanzi++;}
你这样判断一个字节就加?

字符要定义成 unsigned char q;
否则,不可能大于128了,

11楼

#include<stdio.h>
main()
{
 FILE *fp;
 long number=0;
 long zimu=0;
 long hanzi=0;
 long other=0;
 unsigned char q;
 if((fp=fopen("text.txt","r"))==NULL)
 {
 printf("cannot open file!\n");
 exit(0);
 }
 while(!feof(fp))
 {q=fgetc(fp);
 if((q>='A'&&q<='Z')||(q>='a'&&q<='z'))
 {zimu++;}
 else if(q>='0'&&q<='9')
 {number++;}
 else if(q>=128)
 {hanzi++;
 fgetc(fp);}
 else
 {other++;}
 }
 printf("number=%d zimu=%d hanzi=%d other=%d\n",number,zimu,hanzi,other);
 fclose(fp);
}

按照你的改完了 运行后还是不对

12楼

不可能啊,你的程序除了在feof那里还有点小毛病,不可能连字母都认不全的。
 while((q=fgetc(fp)) && !feof(fp))
 { 
把你的程序里feof判断改成这样。结果就应该是正确的了。

13楼

#include<stdio.h>
main()
{
 FILE *fp;
 long number=0;
 long zimu=0;
 long hanzi=0;
 long other=0;
 unsigned char q;
 if((fp=fopen("text.txt","r"))==NULL)
 {
 printf("cannot open file!\n");
 exit(0);
 }
 while((q=fgetc(fp))&&!feof(fp))
 {q=fgetc(fp);
 if((q>='A'&&q<='Z')||(q>='a'&&q<='z'))
 {zimu++;} 
 else if(q>='0'&&q<='9')
 {number++;}
 else if(q>=128)
 {hanzi++;
 fgetc(fp);}
 else
 {other++;}
 }
 printf("number=%d zimu=%d hanzi=%d other=%d\n",number,zimu,hanzi,other);
 fclose(fp);
}
 在text文件中输入:yu于12,
 结果:number=0 zimu=0 hanzi=1 other=0

14楼

你用的是什么编译器啊?什么系统?这么久了也不说,真要把人急死!

 else
 {other++;}后面再加上一个
printf("q=%d\n",q);然后把结果传上来看看。

15楼

斑竹 你能帮下我 我明天还要去学校上学 下雪路不好走 而且要交作业 今天晚上如果你修改完后运行成功了 就把正确的贴下 在下万分感谢

16楼

用TC````` WINXP

17楼

这个程序在我这里早就运行成功了,我不知道你那个破编译器为什么总是错的。
按我14楼的改一下,把结果贴上来看看

18楼

q=117
q=218
q=163
number=0 zimu=0 hanzi=1 other=0

19楼

受不了你了!!!仔细看看你的text.text文件!!!!

20楼

以下运行正确:
#include<stdio.h>
int main()
{
 FILE *fp;
 int number=0;
 int zimu=0;
 int hanzi=0;
 int other=0;
 unsigned char q;
 if((fp=fopen("t.txt","rb"))==NULL)
 {
 printf("cannot open file!\n");
 exit(0);
 }
 while(!feof(fp))
 {q=fgetc(fp);
 if((q>='A'&&q<='Z')||(q>='a'&&q<='z'))
 {zimu++;} 
 else if(q>='0'&&q<='9')
 {number++;}
 else if(q>=128)
 {hanzi++;
 fgetc(fp);}
 else
 {other++;}
 }
 printf("number=%d zimu=%d hanzi=%d other=%d\n",number,zimu,hanzi-1,other);
 fclose(fp);
 return 0;
}

21楼

受不了你了!!!仔细看看你的text.txt文件!!!!

22楼

if((fp=fopen("text.txt","r"))==NULL)
改成
 if((fp=fopen("c:\\text.txt","r"))==NULL)
然后在C:下建立text.txt文件,在里面输入一些东西 ,再看看结果对不对!!!

23楼

while(!feof(fp))
 {q=fgetc(fp);
===

VC99,一定要先fgetc,再feof判断的。不然就会出现你的hanzi-1这种情况了,呵呵。因为文件文件的读取,最后一个字符是255,以表示结束。恰好255>128,所以hanzi多加了一个。

24楼

错了

25楼

是啊,呵呵,就是文件结束多了一个,才减掉,
二进制和读文本,效果应该一样的吧,

26楼

结果分别是什么?别就两个字!!!!

27楼

#include<stdio.h>
main()
{
 FILE *fp;
 long number=0;
 long zimu=0;
 long hanzi=0;
 long other=0;
 unsigned char q;
 if((fp=fopen("c:\\text.txt","r"))==NULL)
 {
 printf("cannot open file!\n");
 exit(0);
 }
 while((q=fgetc(fp))&&!feof(fp))
 {q=fgetc(fp);
 if((q>='A'&&q<='Z')||(q>='a'&&q<='z'))
 {zimu++;}
 else if(q>='0'&&q<='9')
 {number++;}
 else if(q>=128)
 {hanzi++;
 fgetc(fp);}
 else
 {other++;}
 }
 printf("number=%d zimu=%d hanzi=%d other=%d\n",number,zimu,hanzi,other);
 fclose(fp);
}

 现在程序是这样

28楼

while((q=fgetc(fp))&&!feof(fp))
 {q=fgetc(fp);
===老大啊,改成这样:
 while((q=fgetc(fp))&&!feof(fp))
 {

29楼

我输入:语言1245。,
结果:number=2 zimu=0 hanzi=0 other=0

30楼

那结果:number=4 zimu=0 hanzi=0 other=0

发表回复

内 容:
用户名:
  
©2010 Baidu 贴吧协议  意见反馈