您的位置:首页 > 编程语言 > C语言/C++

用户输入一串整数和任意数目的空格,程序自动对所有的整数进行求和

2016-12-15 21:17 337 查看
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的“Enter”键时,数据输入结束。程序自动对所有的整数进行求和并打印出结果。
C语言实现:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
char ch;
int sum=0;
printf("请输入一串整数和任意数目的空格:\n");
//一直到输入的值是整数的时候进入while循环,当输入字符时,scanf返回0,什么都不读,然后再次调用scanf
while (scanf("%d",&i)==1)
{
sum += i;
while ((ch = getchar()) == ' ')//屏蔽空格
;
if (ch == '\n')
{
break;
}
ungetc(ch,stdin);//将变量ch中存放的字符退回给stdin输入流,获取多的退回
}
printf("结果是:%d\n",sum);
system("pause");
return 0;
}


注:
1、关于scanf,当一开始输入空格,回车时,scanf不会处理,一直到输入一个数字时,输入回车时,scanf开始从缓冲区读取整数。
2、getchar():每次只能读取一个字符,利用while语句,当读取空格时不做任何操作,来屏蔽空格,注意此时ch多从缓冲区获取了一个字符,虽然不满足while循环的条件,但是此时ch已经获取了一个字符。
3、如果没有这一句:ungetc(ch,stdin);,结果是不对的,如2所述,ch已经多获取了一个字符,例如输入的是22 33 33 44,遇到第一个空格后,ch获取了3,下一次循环,scanf只能获取一个3,最后就导致结果不对。
C++实现:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int i;
cout<<"请输入一串整数和任意数目的空格:";
int sum = 0;
//一直到输入的值是整数的时候进入while循环,当输入字符时,scanf返回0,什么都不读,然后再次调用scanf
while (cin>>i)
{
sum += i;
while (cin.peek() == ' ')//屏蔽空格,peek()函数:从输入流中读取一个字符 但该字符并未从输入流中删除
{
cin.get();//从指定的输入流中提取一个字符(包括空白字符),
}
if (cin.peek()== '\n')
{
break;
}
}
cout<<"结果是:"<<sum<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 C++
相关文章推荐