课堂随机提问中奖生成器二

1.关于流的输入输出的理解

(1).文件存放在外部磁盘设备中,而程序是加载到内存中才能运行的
(2).流的输入和输出其实相对于内存而言来说的(从内存视角看输入输出)
(3). 流的输入其实就是从外部设备(例如磁盘) 流入 到内存,即流入到程序中,举个最简单的例子,例如你编写的代码中有一个 常量 a,这个常量a 的初始值未知,必须从外部文件加载得到,假设磁盘中有一个 hello.txt文件,假设这个文件中有且只有一个数据 1,那么从hello.txt中读到 1并且把它赋值给常量 a 的过程, 我们把它叫做 流的输入。

2. 三个文件操作封装类

   (1) ifstream    输入操作
   (2) ofstream    输出操作
   (3) fstream   输入和输出操作

3.在下面这个.cpp文件同一目录下新建一个example.txt文件,运行下面的程序就会在该文本文件中打印你好

#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
    ofstream fout;
    fout.open("example.txt");
    fout << "你好"; 
    fout.close();  
    cout<<"文字您好已经打印到 example.txt";
    fout.close();
    getchar();
    return 0;
}

4. 从文件输入到内存

#include <iostream>
#include <fstream>
using namespace std;
int main ()
{   char buff[256];
    ifstream input;
    input.open("example.txt");
    while(!input.eof()){ //检查是否是文件的末尾
        input.getline(buff,256);
        cout<< buff<<endl;
    }
    input.close();
    

    getchar();
    return 0;
}

5. 从一个文本中读取到浮点数并且把它存入到一个二维数组中(存在问题,必须预先定义数组的长度)

#include <iostream>
#include <fstream>
using namespace std;
int main (){   
 
 double array[27][30]={0.0};//如果数据量过大 则需要把 array 定义成static类型, 
                                 //因为默认的堆栈大小容量不够,可以放到静态存储区      
 ifstream infile;//定义文件流对象
 infile.open("example.txt");//打开文档

 double * ptr = &array[0][0];//定义
     
 while(!infile.eof()){

        infile>>*ptr;//读一个单词到 *ptr 中
        ptr++;     
 }
     
     for(int i=0;i<10;i++){
         for(int j=0;j<10;j++){
             cout<< array[i][j]<<" ";
         }
         cout<<" "<<endl;
     }
 infile.close();

    getchar();
    return 0;
}

效果:
在这里插入图片描述
感谢AllenLongcsdn博主

6. 用一维数组存储 来自文件的 字符串,并且统计出字符串的长度。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main (){   
 
int i,datalen=0;
    double num[100];
    ifstream file("example.txt");
    while( ! file.eof() )
    file>>num[datalen++];
    for(int i=0;i<datalen;i++)
    {
        cout<<num[i]<<" ";
    }
    file.close();
    getchar();
}

效果:
在这里插入图片描述

7. 把这个功能封装成一个函数

                      函数部分
#include <fstream>
#include <iostream>
#include <string>
struct data_f {
    char num[100][100];
    int length;
};
using namespace std;
data_f  load_data(data_f &data){
    
    int i,datalen=0;
    ifstream file("example.txt");
    while( ! file.eof() )
    file>>data.num[datalen++];
    //for(int i=0;i<datalen;i++)
    //{
        
      //  cout<<data.num[i]<<" ";
    //}
    file.close();
    data.length=datalen;
    return data;
}
					测试部分
int main (){   
    data_f data;
     load_data(data);
    for(int i=0;i<data.length;i++){
        cout<<data.num[i]<<" ";
    }
    getchar();
}
			            测试结果

在这里插入图片描述

8. 课堂随机提问中奖器 二,从文本加载

加强版由彩色helloworld引出的一个课堂随机提问中奖器

从文件中加载数据,需要在同级别目录下新建一个文本文件,名字叫做example.txt,在这个文本文件中填入 学生的姓名,以空格作为分隔

#include <fstream>
#include <iostream>
#include <string>
//打印彩色的helloworld
#define Kong 32
#include <windows.h>
//GetStdHandle和SetConsoleTextAttribute在头文件windows.h中
#include <iostream>
#include <ctime>
#include <conio.h>
#include <cstdlib>
#include <string.h>
#include <string>

struct data_f {
    char num[100][100];
    int length;
};
using namespace std;
//从文件中加载数据,需要在同级别目录下新建一个文本文件,名字叫做example.txt
data_f  load_data(data_f &data){
    
    int i,datalen=0;
    ifstream file("example.txt");
    while( ! file.eof() )
    file>>data.num[datalen++];
    file.close();
    data.length=datalen;
    return data;
}
/*
int main (){   
    data_f data;
     load_data(data);
    for(int i=0;i<data.length;i++){
        cout<<data.num[i]<<" ";
    }
    getchar();
}
*/
/*
   0 = 黑色      8 = 灰色
   1 = 蓝色      9 = 淡蓝色
   2 = 绿色      A = 淡绿色
   3 = 浅绿色    B = 淡浅绿色
   4 = 红色      C = 淡红色
   5 = 紫色      D = 淡紫色
   6 = 黄色      E = 淡黄色
   7 = 白色      F = 亮白色
*/
//在指定位置打印 指定颜色的 字体,  第一个参数 为 位置参数, 第二个参数为 颜色
void SetColor(COORD pos,unsigned short ForeColor=3){
    
    HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //得到句柄
    //GetStdHandle()它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值),
    //可以传入三个参数,STD_OUTPUT_HANDLE 表示标准输出的句柄
    //COORD pos={50,10};
    SetConsoleCursorPosition(hCon,pos);//SetConsoleCursorPosition()是API中定位光标位置的函数。
    SetConsoleTextAttribute(hCon,ForeColor);//设置控制台文字属性
    
}
void hidden()//隐藏光标,不让光标显示
{
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO cci;
	GetConsoleCursorInfo(hOut, &cci);
	cci.bVisible = 0;//赋1为显示,赋0为隐藏
	SetConsoleCursorInfo(hOut, &cci);
}
int main(){
    
    COORD pos1={50,10};
    COORD pos2={50,10};
    COORD pos3={50,20};
    COORD pos4={0,0};
  
    
    int i=0;//控制颜色
    pos1.Y=10;
    char p,a;
    data_f data;
     load_data(data);
  int t;
    srand(time(0));       //seed
    string temp;
     int left,up;
 while(1){
    
   
    left= rand()%500;
    t = rand() % 10;       // random number 1-10
        temp=data.num[t];
        //pos2.X=left;
        SetColor(pos2,left);
        hidden();
      //  increaseFontSize();
         cout <<"  " <<temp<<" " << endl;  
         Sleep(20);
    system("CLS");
    while (_kbhit())
	{
		if ((p = _getch()) == -32) p = _getch();
		if(p==Kong){
           // increaseFontSize();
            SetColor(pos2,2);
            cout<<"stand up ..."<<temp<<endl;
           
            system("pause");
            break;
        } 
    }

        
 }
getchar();  
   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值