Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 清除输入缓冲区意味着什么?_C++_C++11_Visual C++_Buffer - Fatal编程技术网

C++ 清除输入缓冲区意味着什么?

C++ 清除输入缓冲区意味着什么?,c++,c++11,visual-c++,buffer,C++,C++11,Visual C++,Buffer,我正在阅读学校课本中的一段代码,其中有一行代码的功能是清除输入缓冲区(代码中提到的注释) 我不太明白它的目的。它肯定是必需的,因为它的移除会扰乱控制台的输入过程 请解释它的功能是什么,以及当我删除它时会发生什么 我也尝试过使用cin.ignore();而且效果也不错。这里的函数是如何使用的,它是cin.ignore()的确切替代品吗 在学校里,我们使用的是C++的旧版本。因此使用了“.h”扩展名clrsc();,等等 #包括 #包括 #包括 void main(){ clrsc(); ofstr

我正在阅读学校课本中的一段代码,其中有一行代码的功能是清除输入缓冲区(代码中提到的注释)

我不太明白它的目的。它肯定是必需的,因为它的移除会扰乱控制台的输入过程

请解释它的功能是什么,以及当我删除它时会发生什么

我也尝试过使用cin.ignore();而且效果也不错。这里的函数是如何使用的,它是cin.ignore()的确切替代品吗

在学校里,我们使用的是C++的旧版本。因此使用了“.h”扩展名clrsc();,等等

#包括
#包括
#包括
void main(){
clrsc();
ofstreamfout(“student.txt”,ios::out);
字符名[30],ch;
浮点数=0.0;
对于(int i=0;i<5;i++){

我想从一开始就指出你没有使用“旧版本的C++”。你只使用了一些C代码(比如CLSRCH())和C风格的编程,并且实际上可能不是CPP11或CPP14。C++的头文件通常也只是。H.< 现在回答你的问题:

cin.get(ch);  
“\n”字符被读入ch.“\n”是一个字符,换行符

确实做了与

cin.ignore();
它用于清除输入缓冲区,这意味着正在从输入缓冲区中删除行的空结尾('\n')


为什么你问这个问题?这是一个很好的例子,说明你为什么要这么做。希望这对你有所帮助!

我只想首先指出,你没有使用“旧版本的C++”。你只是在使用一些C代码(如CLRSC())和C风格的编程,并且实际上可能不是CPP11或CPP14。C++的头文件通常也只是。H.< 现在回答你的问题:

cin.get(ch);  
“\n”字符被读入ch.“\n”是一个字符,换行符

确实做了与

cin.ignore();
它用于清除输入缓冲区,这意味着正在从输入缓冲区中删除行的空结尾('\n')

为什么你问这个问题吗?这是一个很好的例子,说明你为什么要这么做。希望这对你有所帮助

这是一种不太可靠的清除输入缓冲区的方法。如果键入一个数字,然后输入Enter,第一行将使用该数字并将值放入
标记中,而第二行将读取换行符并丢弃它

它不可靠,因为它不考虑用户可能在数字后输入的空格。更可靠的方法是使用

cin>>标志;
cin.ignore(std::numeric_limits::max(),'\n');
这是一种不太可靠的清除输入缓冲区的方法。如果键入一个数字,然后输入Enter,第一行将使用该数字并将值放入
标记中,而第二行将读取换行符并丢弃它

它不可靠,因为它不考虑用户可能在数字后输入的空格。更可靠的方法是使用

cin>>标志;
cin.ignore(std::numeric_limits::max(),'\n');

<代码> >他正在运行C++的“旧版本”。他很可能使用Turbo C++来运行C++的标准/非标准版本。@ NATOLIOVER我的坏,对不起。谢谢你指出。你必须承认“老版本的C++”听起来很奇怪。我想他是指“不是CPP11或CPP14”。我在编程方面是初学者。是的,我使用Turbo C++,我认为它是旧版本,我的坏。无论如何,不应该CIN。?@PrakharAgarwal很好,我更新了我的答案来澄清;)@JulianDeclercq好的,但是为什么换行符会自动传递到'ch'中?我的意思是,控制台不应该为'marks'和'ch'单独输入吗?不,他正在运行'older'C++版本。他最可能使用的是Turbo C++,它运行了一个标准的/非标准版本的C++。@ NathOLIVER我的坏,抱歉。谢谢你指出。你必须承认“老版本的C++”听起来很奇怪。我想他是指“不是CPP11或CPP14”。我在编程方面是初学者。是的,我使用Turbo C++,我认为它是旧版本,我的坏。无论如何,不应该CIN。?@PrakharAgarwal很好,我更新了我的答案来澄清;)@JulianDeclercq好的,但是为什么换行符会自动传递到'ch'中?我的意思是,控制台不应该为'marks'和'ch'单独输入吗?
cin >> marks;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');