首先这种while(cin>>a) 或者while(scanf(“%d”,&a)!=EOF)这种是针对多个无限样例输入而进行的,EOF表示除非认为输入ctrl+z会终止循环的读入,否则读入一个a之后键入enter之后执行while循环体,然后再次返回scanf函数等待输入,除非人为的这次键入改为ctrl+z不在是整型a了,终止输入样例。
由于cin>>a>>x;这种cin会对空格和换行进行忽略,仅作为分隔的识别符,但不会读取该分隔符的值,因此需要用一个能读取换行空格的函数来判断是否在cin>>x之后随之键入的字符是否为换行还是空格,如果空格则继续读键入整数值,如果是enter则跳出输入循环。cin类中的get()函数就是这个功能。
vector <int> q;
while(cin>>a)
{
x=cin.get();
if(x=='\n')
break;
q.push_back(a);
}
同理也可以用scanf(“%d%c”,&a[i],&c);
- #include<stdio.h>
- #define MAX 100 //定义最大长度
- int main()
- {
- int a[MAX];
- char c;
- int i;
- for(i=0;i<MAX;i++)
- {
- scanf("%d%c",&a[i],&c); //每次扫描输入以数字和char类型输入为准
- if(c=='\n') //如果接受到回车,则break
- break;
- }
- //这样我们就得到了一个长度为i的数组a[]
- }
方法二
运用isstringstream进行判断
首先读入一行字符串,也即将键入的以空格为分隔符的一行字符串数字存入一个string对象中,然后用isstringstream进行分割,分割的整数存在变量str中,然后循环str>>a,依次输出。
//从string对象中读取字符 也即将string对象
//nums以空格为分隔符分割出字符,然后以enter结尾,然后将分割的整数在istr中
//以>>可以存储在变量中 进行输出
for (int i = 0; i < 3; i++)
{
getline(cin, nums); //整行读入字符串,以string为读入对象,可以包括空格,getline仅以enter为结尾符。istringstream istr(nums);
while (istr >> num)
{
num++;
cout << num << " ";
}
cout << endl;
}