cin.ignore(1,'\n');问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FAKER_0X0/article/details/89500712

C++文件的读写操作

  • cin.ignore( a, ch ),它表示从输入流 cin 中提取字符,提取的字符被忽略,不被使用。而每抛弃一个字符,它都要进行计数和比较字符:如果计数值达到 a 或者被抛弃的字符是 ch ,则cin.ignore() 函数执行终止;否则,它继续等待。
  • 常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。例如可以这么用,cin.ignore(1024, ‘\n’),通常把第一个参数设置得足够大,这样实际上是为了只有第二个参数 ‘\n’ 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲流中清除出去。
  • 如果默认不给参数的话,默认参数为cin.ignore(1, EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。
//ASCII文件的读写操作
#include <iostream>
using namespace std;
#include "fstream"

int main()
{
	char fileName[80];
	char buffer[255];

	cout << "请输入一个文件名: ";
	cin >> fileName;

	ofstream fout(fileName, ios::out);
	fout << "1111111111111111111\n";
	fout << "2222222222222222222\n";
	//cin.ignore(1,'\n');	//不加这一句会忽略下一句getline所需要的输入,why?
	//用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。
	cin.getline(buffer, 255); //从键盘输入
	fout << buffer << "\n";
	fout.close();

	ifstream fin(fileName);
	cout << "Here's the content of the file: \n";
	char ch;
	while (fin.get(ch))
		cout << ch;

	cout << "\n***End of file contents.***\n";
	fin.close();
	system("pause");
	return 0;
}

上例程中不加cin.ignore(1,’\n’);getline输入受到影响,无法从键盘输入,具体是怎样影响的呢?

cin.ignore(1,’\n’);应该只清除输入缓冲区回车符前一个字符,为何能消除这个影响?

此前输入缓冲区里包含的是fileName。

缓冲区里有数据getline才会不执行而直接返回。

猜你喜欢

转载自blog.csdn.net/FAKER_0X0/article/details/89500712