1 c语言中输入
参考网上如下c输入代码
#include<stdio.h>
int main()
{
int a, b;
while (scanf_s("%d %d\n", &a, &b) != EOF)//此处应用了EOF
{
printf("%d\n", a + b);
}
return 0;
}
经编译运行(vs2019)出现如下问题:
输入如下时
循环打印
原因分析:码是从输入流里面获取整型数据,如果你输入一个字符型的,scanf不拿这个字符的数据出来,这个数据就一直在缓存里,最后就导致了死循环。参考链接https://zhuanlan.zhihu.com/p/51830020
vs2019退出循环输入好像需要输入3次ctrl+z指令
2 c++中输入
1.参考网上如下代码
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int c;
while ((c = cin.get()) != EOF) {
cout << (char)c<<"***"<<endl;
//cout << c;
}
return 0;
}
编译运行后,输入输出如下
理解:get()函数每次读写一个字符,像空格,换行键这种控制字符是以ASCII码的形式读取的,然后输出时对应输出相应的控制命令,使得从感官上觉得编译器并没有读取这些控制命令。
参考链接:
你真的理解对了C语言中的EOF吗?
2.参考网上如下代码
#include<stdio.h>
#include<iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
vector<int> a;
int input;
int length;
cout << "please input some numbers(EOF to end!):" << endl;
while (cin) {
cin >> input;
cout << input << "***"<<endl;
a.push_back(input);
}
length = a.size();
for (int j = 0; j < length; j++) {
cout << setw(4) << a[j];
}
cout << endl;
return 0;
}
编译运行后输入输出如下
理解:cin读取非对应类型的数据时,返回值为0
cin读取数据时,是先将小黑框输入的一行数据写入缓冲区,然后从缓冲区读取对应的数据