搜索
查看: 1837|回复: 4
打印 上一主题 下一主题

请问我的程序错在哪里?

[复制链接]
跳转到指定楼层
楼主
发表于 2013-6-14 20:43:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 sinbud2004 于 2013-6-14 20:48 编辑

有一个a.txt文件,内容如下:
——————
张三;李四;王五;赵二;钱砂
服务业;磷肥;求助;基下;基二
磷肥;孙膛
攻且;胆小如鼠;华清嘉园;有数;别和
——————
一共有四行,每个元素之间用分号分隔,现在编程想弄清一行最多有几个元素,编程如下:
[code=Cpp width=740px]#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
FILE *open1;
int j=0;
int k=0;
int c;
if(open1=fopen("a.txt","rt"))
printf("..");
else printf("_.._");
while(fgetc(open1)!= EOF)
{
c=fgetc(open1);
if(c==';'){
j=j+1;
printf("%d ",j);
}
else if((c=='\n')&&(j>k)) {
k=j;
j=0;
}
else if((c=='\n')&&(j<k)){
j=0;
}
}
printf("最多有%d个元素\n",k+2);
fclose(open1);
system("pause");[/code]

但是运行结果是这样子的:
————
..1 2 3 4 1 2 最多有6个元素
请按任意键继续. . .
————
这个结果明显不对,(1)明明四行,却有6个数出来,(2)最多有5个元素,结果是6

请问我错在哪里?

最佳答案

查看完整内容

做了必要的改动
沙发
发表于 2013-6-14 20:43:37 | 只看该作者
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         FILE *open1;
  5.         int j=0;
  6.         int k=0;
  7.         int c;
  8.         if((open1=fopen("a.txt","r"))) /* t是非标准的,不知道你的环境是不是支持,所以去掉了 */
  9.                 printf("..");
  10.         else printf("_.._");
  11.         while((c=fgetc(open1))!= EOF)
  12.         {
  13.                 if(c==';'){
  14.                         j=j+1;
  15.                         printf("%d ",j);
  16.                 }
  17.                 else if((c=='\n')&&(j>=k)) { /* 这里加了一个= */
  18.                         k=j;
  19.                         j=0;
  20.                 }
  21.                 else if((c=='\n')&&(j<k)){
  22.                         j=0;
  23.                 }
  24.         }
  25.         printf("最多有%d个元素\n",k+1); /*这里是k+1, 分号数目+1 */
  26.         fclose(open1);
  27.         system("pause");
  28.         return 0;
  29. }
复制代码
做了必要的改动
板凳
发表于 2013-6-14 21:26:27 | 只看该作者
while(fgetc(open1)!= EOF)
{c=fgetc(open1);
....

我想你要的是逐个读取文件中的字符?那样应该是
  1. while(c = fgetc(open1) != EOF)
复制代码
像你那样写是读取一个字符丢弃一个,然后再读取一个用来处理

还有为什么最后输出地是k+2? 你的代码的业务逻辑好像是用k保存最大的j

fopen的参数是"rt"? 你确定你用的实现有t这个参数?
地板
 楼主| 发表于 2013-6-14 21:56:47 | 只看该作者
rosynirvana 发表于 2013-6-14 21:26
while(fgetc(open1)!= EOF)
{c=fgetc(open1);
....

谢谢,k+几无所谓 ,我改成输出k也可以
我已经改成了while(c = fgetc(open1) != EOF)其他的没变,但是跑到最后j=0,j=0
请问这是怎么回事?
5#
发表于 2013-6-14 23:49:53 | 只看该作者
(1)明明四行,却有6个数出来

你说的这点,是因为代码上是每遇到一个分号输出一次,所以应该输出13次
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表