要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现该行中任一位置。当用户按enter键时退出程序。程序自动对输入的数字进行求和。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int sum = 0;
char ch;
printf("请输入一串整数和任意数目的空格:");
while (scanf("%d", &i) == 1)
{
sum += i;
while ((ch = getchar()) == ' '); //从输入流按顺序接着取出一个字符,判断是否为空格
if (ch == '\n')
{
break; //getchar已经把内存读入,此时判断是否为换行,如果是,则退出
}
ungetc(ch, stdin); //此语句用于把getchar从输入流取出的字符放回输入流
}
printf("结果是:%d\n",sum);
fflush(stdin);//清空输入缓冲区(加不加不影响结果)
system("pause");
return 0;
}
c++版本
#include<iostream>
using namespace std;
int main()
{
int sum=0;
int c;
while(cin>>c)
{
sum+=c;
while(cin.peek()==' ')
{ //屏蔽空格
cin.get();
}
if(cin.peek()=='\n')
{
break;
}
}
cout<<sum<<endl;
return 0;
}
其中**cin.get()**用来从指定的输入流中提取一个字符(包括空白字符)函数的返回值就是读入的字符。若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF。
**cin.peek()**的返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测指针停留在当前位置并不后移;如果要访问的字符是文件结束符,则函数值是EOF(-1)。