I/O Stream与cin处理行尾'\n'的函数重载

fin.txt

#include <iostream>
#include <fstream>

using namespace std;
// 将默认参数设置为:cin, 从键盘读入使用 newLine(),从文件读入使用 newLine(fin)
void newLine(istream& in_stream = cin); 


int main() {
    ifstream fin;

    cout << "Enter a number:\n";
    int number;
    cin >> number;
    cout << "Now enter a letter:\n"; char symbol;
    newLine(fin);
    cin.get(symbol);
    cout << symbol;
}

void newLine(istream& in_stream) {
    char dis;

    do {
        in_stream.get(dis);
    } while (dis != '\n');
}

IO.cpp

/*
 ##
 u
 v

 i         }
 v     }
 Enter a number:
 45
 Now enter a letter:
 q
 q
 */
#include <iostream>
#include <fstream>

using namespace std;

void newLine(istream& in_stream);

int main() {
    ifstream fin;
    fin.open("/Users/br/Documents/C:C++/character/character/fin.txt");
    if (fin.fail()) {
        cout << "fin file opening failed.";
        exit(EXIT_FAILURE);
    }

    char c;
    while (! fin.eof()) {
        fin.get(c);
        cout.put(c);
        if (c != '\n')
            newLine(fin);
    }

    cout << "\nEnter a number:\n";
    int number;
    cin >> number;
    cout << "Now enter a letter:\n"; 
    char symbol;
    newLine();
    cin.get(symbol);
    cout << symbol;

    fin.close();

    return 0;
}
// 注意此处为 istream
void newLine(istream& in_stream) {
    char dis;

    do {
        in_stream.get(dis);
    } while (dis != '\n' && dis != '\0'); 
    /* 不加条件 dis != '\0' 时, 在键盘输入的情况下没有任何问题,
     * 但在 I/O stream 文件下如果,文件的末尾没有回车符号的话会导致程序一直向下读取进入死循环。
     * /
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值