C++中Ctrl+Z是怎么结束输入的?
#include<vector>
using namespace std;
int main()
{
vector<int> ivec;
int ival1,ival2;
while(cin>>ival1)
ivec.push_back(ival1);
for(vector<int>::size_type index=0;index!=ivec.size();++index)
cout<<ivec[index]<<' ';
cout<<endl;
cin>>ival2;
cout<<"ival2="<<ival2<<endl;
system("pause");
return 0;
}
输入vector中的元素时按Ctrl+Z结束,程序就不能输入ival2而是直接输出一个错误的值,这是为什么? 展开
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。
Ctrl+Z:一般用于输入字符串时,比如下面这个程序。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
vector<string> a;
string tmp;
while (cin>>tmp){
a.push_back(tmp);
}
for (vector<string>::iterator iter = a.begin(); iter != a.end(); ++iter){
cout << *iter << endl;
}
return 0;
}
扩展资料
C语言中whlie跳出循环的结束方式:
1、break关键字
讲到了break,用它来跳出 switch 语句。当 break 关键字用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。
while 循环条件为 1,是一个死循环。当执行到第100次循环的时候,计算完i++;后 i 的值为 101,此时 if 语句的条件 i> 100 成立,执行break;语句,结束循环。在多层循环中,一个 break 语句只向外跳一层。
2、continue语句
continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。
程序遇到while时,变量c的值为'\0',循环条件c!='\n'成立,开始第一次循环。getchar() 使程序暂停执行,等待用户输入,直到用户按下回车键才开始读取字符。
在微软的DOS和Windows中,“Ctrl+Z”输入的是EOF符号,就是 C++中标准输入的结束符号。
例如标准输入函数scanf函数返回成功读入的数据项数,读取数据时遇到了“文件结束”则返回EOF。如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。
C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
扩展资料:
EOF的应用:
档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。
C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。
在 UNIX中, EOF表示能从交互式 shell (终端) 送出 Ctrl+D (习惯性标准)。在微软的 DOS 与 Windows 中能送出 Ctrl+Z。在某些例子处理纯文字档案或从"字元设备"读入资料。
参考资料来源:百度百科-scanf
参考资料来源:百度百科-EOF
#include<vector>
using namespace std;
int main()
{
vector<int> ivec;
int ival1,ival2;
while(cin>>ival1,!cin.eof())
ivec.push_back(ival1);
for(vector<int>::size_type index=0;index!=ivec.size();++index)
cout<<ivec[index]<<' ';
cout<<endl;
cin.clear();
cin>>ival2;
cout<<"ival2="<<ival2<<endl;
system("pause");
return 0;
}
程序如上。你加个
cin.clear();
就可以了。就是你Ctrl+Z结束输入后,可以输入下个值了。
这个函数主要是回复有效状态。
Ctrl+Z是文件结束符。