注册 登录
编程论坛 C++教室

大家帮我看下(文件输出问题)

flysky102 发布于 2008-03-16 20:39, 1222 次点击
题目就是打开个文件,然后读该文件并告诉里面包含多少个单词
# include <iostream>
# include <fstream>
int main()
{using namespace std;
 ifstream fine;
 char ch[50];
 cout<<"请输入";
 cin.getline(ch,20);
 fine.open(ch);
 if(!fine.is_open)
  {cout<<"coud not open the file";
   cout<<"请检查";
   exit(EXIT_FAILURE);
}
 char tt;
 int count=0;
 fine>>tt;
 while(fine.good())
 {count++;
  fine>>tt;
}
 if(fine.eof)
  cout<<"end of the read";
  else if(fine.fail)
   cout<<"unknown the file";
  else if(count==0)
   cout<<"none word";
  cout<<count<<"words";
  system("pause")
   return 0;
}
13 回复
#2
flyue2008-03-16 20:59
含有多少个单词,是不是检查里面有多少个空格呢?
#3
newyj2008-03-16 21:01
using namespace std 不是该放在 主函数 外面的吗
放在里面和放在外面有什么区别呀  谢谢了
#4
flysky1022008-03-16 21:05
放里面和外面基本没区别,只检查单词数,不要空格
#5
flyue2008-03-16 21:08
那能不能让我看下要检查的文件里面都是些什么内容?
#6
flysky1022008-03-16 21:11
晕,文件是我随便建的,里面的单词是随便写的,如下:
fa faf fafsfa vdafas fafasfa fasfasf fasfasf fasfdaf fa fafas fd afsadsfasdf f asf asf asf
#7
wangxinkai2008-03-16 22:04
我刚开始学C++,所以不太清楚文件流,
我开始学的是C的,
main(int argc, char *argv[])
   { FILE *fp;
      char ch;
      if(argc!=2)                                 
          {  printf("the number of arguments not correct\n");
              printf(“\n Usage:  可执行文件名  源文件名");
              exit(0);
          }

if ((fp=fopen(argv[1],"r"))==NULL)
      {  printf("can not open source file\n");
          exit(0);
      }
   for(; (ch=fgetc(fp))!=EOF; )
      putchar(ch);     
  fclose(fp);      
}

你参考下吧。
#8
flysky1022008-03-16 22:21
不太懂啊。。。。
#9
wangxinkai2008-03-16 22:22
C++ 也能用,这是C语言的文件读写;
#10
flysky1022008-03-16 22:50
可是我想用C++的文件读写啊
#11
flysky1022008-03-17 21:23
为什么没有人能给我解答呢?小弟急求高手能点拨一下
#12
flysky1022008-03-18 21:42
不能沉啊,帮帮我吧
#13
wfx_best2008-03-18 22:20
首先我要说的是,你的代码有很多语法错误,你应该再看看相关输入输出流方面的资料,要想理解它也许你不止看二三遍,慢慢来吧.
   下面回到你的问题..........................
   你的问题有二个,  一是打开输入的文件名对应的文件;  二是分析这个文件里有多少个单词
第一个问题很好解决, 如下:
    ifstream in;
    string inFileName;
    cout<<"输入文件名:";
    cin>>inFileName;
         // c_str() 是把string字符串转化成 C 风格的字符串
         // 为什么要转化,因为 open()函数只接受 C 风格字符串
         in.open(inFileName.c_str());
    if(!in)  //如果打开失败, 只要这样检查一个流对象就行了
    {
        cerr<<"cerr open infile!"<<endl;
        exit(1);
    }
输入的文件名可是一个路径,如果是文件和执行文件在同一目录,只要输入文件名就可以了.

   至于第二个问题就不那么容易了, 因为单词是多个单字符组成的,但是你只能检查单个字符,程序是不可能知道那样才算一个单词,这个必需由程序员自己来设计.这里有个办法:我们可以假想一个单词就是几个字符的连续形式,只要这个连续性就打断我们就可以认为已经读完一个单词了.(打断的字符可是空格,可能是回车,反正不是字母的字符就是我们认为的打断字符)
   好了如果你已经明白的话,就可以根据这个算法自己写一个识别单词的函数.至于计数就不用说了,如果能识别单词,计数功能只是稍加几句代码而已.
#14
flysky1022008-03-19 17:21
我是按C++ primer(第5版)上说的方式写的程序,如果按那上面讲的,检查文件是否存在的语句应该是没错的,可是不知道为什么编译时还是出错了
1