【C++ 流类库与输入输出 】实验七

    1. 基础练习 (1)教材习题 11-7 (2)教材习题 11-3 (3)教材习题 11-4



      2. 应用练习 (1)已知有班级名单文件 list.txt(见实验 7 附件包)。编写一个应用程序实现随机抽点 5 位同学,在屏幕上显示结果,同时,也将结果写入文件 roll.txt。 ① 编写程序实现题目基本功能要求。(必做) ② **选做*) 对①中实现的基本功能进行完善、扩充,使得这个点名应用程序更灵活、更方便。比如: a) 从键盘输入班级文件名,支持对不同班级的点名操作; b) 从键盘输入用于保存点名结果的文件名。更灵活地,自动获取当前系统日期作为文 件名,比如 20180612.txt。(如果希望更细粒度,文件名可以到小时和分钟这一层级); c) 随机抽点人数不固定,通过键盘按键控制何时抽点结束; d) 通过菜单及程序的函数模块划分,或类的设计与实现,做成一个更完善的应用,等 等。 (2)统计英文文本文件字符数、单词数、行数,文件名由键盘输入。 ① 编写 C++程序实现题目基本功能要求。(必做) ② 选做*** a) 提供菜单,由用户选择统计内容; b) 思考当文本内容数量级偏大,①处已实现的程序能否胜任,实现快速统计?在算法 和处理逻辑上是否存在进一步改进的部分?
  1. 解答:

    1. 11-3
      1 #include<iostream>
      2 #include<fstream>
      3 using namespace std;
      4 int main(){
      5 ofstream out("test1.txt");
      6 if(!out) {
      7 cout << "fail to open." << endl;
      8 return 1;
      9 }
      10 out<<"已成功写入文件!"<<endl;
      11 out.close();
      12
      13 return 0;
      14 }

    【C++ 流类库与输入输出 】实验七

    1. 11-4:

    1 #include <iostream>
    2 #include <fstream>
    3 #include <string>
    4 using namespace std;
    5 int main() {
    6
    7 string s;
    8 ifstream in("test1.txt");
    9 if(!in) {
    10 cout << "fail to open." << endl;
    11 return 1;
    12 }
    13 in >> s;
    14 cout << s;
    15 in.close();
    16 return 0;
    17 }

    【C++ 流类库与输入输出 】实验七

    1. 11-7

    ```
    // p510, ex11-7

    include

    using namespace std;

    int main() {

    ios_base::fmtflags original_flags=cout.flags();//保存现在的参数设置
    
    cout << 812 << '|';
    cout.setf(ios_base::left, ios_base::adjustfield);//输出左对齐
    
    cout.width(10);//设置域宽,但是只对第一个输出起作用 
    cout << 813 << 815 << 'n';
    
    cout.unsetf(ios_base::adjustfield);//清除左对齐格式 
    cout.precision(2);// 两位浮点数 
    cout.setf(ios_base::uppercase|ios_base::scientific);// 科学计数法 
    cout << 831.0;
    cout.flags(original_flags);    // 恢复原来的格式设置
    
    return 0;
    

    }
    ```

    【C++ 流类库与输入输出 】实验七

    1. 这道题我分别采用三种方式读入老师所给的文件,但是读不进来。测试输出的都是空格乱码。我将list.txt文件和代码放在同一目录下,但是,就是读入不了啊。然后我就自己新写了一个test1.txt文件,可以正常读取输出。老师所给的文件有什么特殊输入,特殊字符吗?一定要文件读入这个list.txt文件是不是在考查哪个知识?遗憾的是,我并没有成功读入文件啊!!!下面给出我自己创建的文件运行
      1 #include<iostream>
      2 #include<string>
      3 #include<cstdlib>
      4 #include<fstream>
      5 using namespace std;
      6 struct student{
      7 string order;
      8 string xuehao;
      9 string name;
      10 string classname;
      11 };
      12 int main(){
      13 student s[83];
      14 ifstream infile("test1.txt");
      15 if(!infile) //测试是否成功打开
      16 {
      17 cerr<<"open error!"<<endl;
      18 return 0;
      19 }
      20 /*利用行读取来获取文件信息*/
      21 /*int i=0;
      22 char c[83];
      23
      24 while(!infile.eof()){
      25 infile.getline(c,83);
      26 cout<<c[i]<<endl;
      27 i++;
      28 }
      29 infile.close(); //利用行读入进行文件读取*/
      30
      31
      32 /*仿照课件员工工资读取方式读取*/
      33 /* while(!infile.eof())
      34 {
      35 infile.read(reinterpret_cast<char*>(&s), sizeof(s)); //只有二进制才能这样读取吗?
      36 if(infile) {
      37 cout << s.order << " " << s.xuehao << endl;
      38 }
      39 }
      40 infile.close(); */
      41
      42 int i=0;
      43 while(infile>>s[i].order>>s[i].xuehao>>s[i].name>>s[i].classname)
      44 {
      45 i++;
      46 }
      47 infile.close();
      48 int a=1;
      49 ofstream out("roll.txt");
      50 for(int i=1;i<=5;++i)
      51 {
      52 a=rand()%i+1;
      53 cout<<s[a].order<<" "<<s[a].xuehao<<" "<<s[a].name<<" "<<s[a].classname<<endl;
      54 out<<s[a].order<<" "<<s[a].xuehao<<" "<<s[a].name<<" "<<s[a].classname<<endl;
      55 }
      56 out.close();
      57
      58 return 0;
      59 }

    【C++ 流类库与输入输出 】实验七

    1. 最后的蓝色部分也是一行输出,由于我定义的s数组为100,但是文件里面只有5个名字,所以输出了其中没有值的一项。
    
    2. 写入的文件截图如下
    3. :![](https://www.ccppcoding.com/wp-content/uploads/1239417-20180620160703451-976001351.png)
    4. 利用实验七里面的list.txt生成截图如下:![](https://www.ccppcoding.com/wp-content/uploads/1239417-20180620160828515-1638765046.png)
    5. SYSTEMTIME sys;<br></br>GetLocalTime(&sys);<br></br>cout<<sys.wYear<<sys.wMonth<<sys.wDay<<sys.wHour<<sys.wMinute<<sys.wSecond<<endl;可以读取当前时间,头文件#include<windows.h>,我的想法是将时间强制转化为string,进行字符串的连接之后,形成一个string h,用h 命名文件名字。强制类型转化失败了。
    
    1. 读取单词
      ```

    include

    include

    include

    using namespace std;
    int main(){
    ofstream out("words");

    out<<"you are so much kind!"<<endl;
    out<<"guss this can be successd"<<endl;
    out.close(); //手动创建文件

    /cout<<"Please Enter filename:n";//在命令行窗口输入文件
    string filename;
    cin>>filename;
    ifstream in(filename.c_str()) ;
    /

    ifstream in("words");
    long linenum=0,chnum=0,wordnum=0;
    char str[1000];
    while(in.getline(str,1000)){
    for(int i=0;i<strlen(str);i++)
    {
    chnum++;
    if(str[i]==' '||str[i]==','||str[i]=='!')
    wordnum++;
    }
    linenum++;
    }
    cout<<"行数:"<<linenum<<endl<<"字符数:"<<chnum<<endl<<"单词数:"<<wordnum<<endl;
    in.close();
    return 0;
    }
    ```

    【C++ 流类库与输入输出 】实验七

原文链接: https://www.cnblogs.com/yitou13/p/9204554.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/276299

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午1:38
下一篇 2023年2月15日 上午1:38

相关推荐