c++中的输入和输出

输入 cin

cin代表缓冲区,先来看一个常用的例子

int main(){
    char input[1024];
    char c;
    cout << "input:" << endl;
    while (cin.peek() != '\n') {
        cin >> input;
        cout << input << endl;
    }   
}

“>>” 运算符读取数据时,遇到空格会自动停止,因此可以用于将一句话,如 hello world 按单词输出。

int main(){
    char input[1024];
    char c;
    c = cin.get(); //不加任何参数,从缓冲区读取一个字符
    cin.get(c);	//读取一个字符给括号里的c
    cin.get(input, 1024); //读取1024个字符到input,不会读取缓冲区里的换行
    cin.get(input, 1024, 'a'); //读取字符到input,将a和a以后的抛弃

	//注意区分下面两个getline,前一个是cin的成员函数,后一个不是
	//读取1024个字符到input,如果不满足长度,到换行符为止(会将最后的换行符读取,然后抛弃)
    cin.getline(input, 1024);

	//从cin中读取一行数据到input
    getline(cin,input);

    cin.ignore();	//读取一个字符,然后丢掉,也就是忽略一个字符
    cin.ignore(2);	//读取两个,丢掉
    cin.ignore(100,'\n');	//忽略100个字符,或者知道遇到换行为止

    cin.peek();	//读取一个字符,然后放回去,也就是查看一个字符
    cin.putback(c); //放回一个字符
}
标志位和清空

网上很多教程都说 cin.sync 是清空缓存的意思,这里其实是有问题的,xcode的c++编译器不能清空缓存,但是g++是可以的,这里我们使用 cin.ignore(1024,’\n’) 来替代,1024带表一个很大的数。
cin.fail() 返回的是标志位是否有效
cin.clear() 重置标志位

int main(){
    int num = 0;
    cout << "input" << endl;
    while (true) {
        cin >> num;
        cout << "标志位:" << cin.fail() << endl;
        cin.clear();    //重置标志位
//        cin.sync();     //清空缓冲区
        cin.ignore(1024,'\n');
        cout << "标志位:" << cin.fail() << endl;
    }
}

如果觉得1024的忽略还不够大,可以用下面的方式设置,如果是文件读取就用 EOF,控制台输入就用 '\n’

int main(){
    int num = 0;
    cout << "input" << endl;
    while (true) {
        cin >> num;
        cout << "标志位:" << cin.fail() << endl;
        cin.clear();    //重置标志位
//        cin.sync();     //清空缓冲区
        while (cin.peek() != '\n') {
            cin.ignore();
        }
        cout << "标志位:" << cin.fail() << endl;
    }
}

输出 cout由于用的少,略略略

文件操作

输出到文件

ofstream ofs("./test.txt",ios::out | ios::trunc);	//out代表输出到文件,trunc不写也是默认,如果没有文件会创建,有文件会把里面内容删除,然后在输出。
    if (ofs.is_open()) {
        ofs << "第一行数据" << endl;
        ofs << "第二行数据" << endl;
        ofs << "第三行数据" << endl;
    }else{
        cout << "文件打开错误" << endl;
    }
    ofs.close();

也可以

ofstream ofs;
ofs.open("./test.txt",ios::out | ios::trunc);

从文件输入

ifstream ifs;
    ifs.open("./test.txt",ios::in);
    if (ifs.is_open()) {
        char output[1024];
        char c;
        while (ifs >> output) {	//按行输出
            cout << output << endl;
        }
    }else{
        cout << "文件打开失败" << endl;
    }
    ifs.close();
while ( (c = ifs.get()) != EOF) {	//逐个字符输出
            cout << c;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值