C&C++

  编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的“Enter”键时,数据输入结束。程序自动对所有的整数进行求和并打印出结果。

  C 语言版本:

#include <stdio.h>
#include <stdlib.h>

void main()
{
      int i;
      int sum = 0;
      char ch;

      printf("请输入一串整数和任意数目的空格: ");

      while( scanf("%d", &i) == 1 )
      {
            sum += i;

            while( (ch=getchar()) == ' ' )  // 屏蔽空格
                  ;

            if( ch == '\n' ) 
            {
                  break;
            }

            ungetc( ch, stdin );  // 将变量ch 中存放的字符退回给stdin输入流。
      }
      
      printf("结果是: %d", sum);
      printf("\n");
      system("pause");
}
View Code

  C++ 语言版本:

#include <iostream>

using namespace std;

int main()
{
      int sum = 0;
      int i;

      cout << "请输入一串整数和任意数目的空格:";

      
      while( cin >> i )
      {
            sum += i;
            while( cin.peek() == ' ' )
            {
                  cin.get();
            }
            if( cin.peek() == '\n' )
            {
                  break;
            }
      }

      cout << "结果是: " << sum << endl;

      return 0;
}
View Code

  C++ 版本分析:这个程序使用了流对象 cin。这个对象的类型是istream,它知道如何从用户终端读取数据。

   cin >> i; cin 输入操作符又称为提取操作符,它一次从输入流对象cin 提取一个整数。 当用户进行键盘输入时,对应的字符将输入到操作系统的键盘缓冲区中。 这样,当用户点击键盘上的“Enter”键时,操作系统把键盘缓冲区的内容传输到cin 流的内部缓冲区,“>>”操作符随后从这个缓冲区提取需要的信息。我们还发觉,如果用户不进行键盘的输入,程序将会阻塞。这是阻塞性(blocking)IO的例子。

  “>>”最初定义为右移操作符,它在C++ 中进行了重载,当它按照这里所示的方式使用时,它就用于从输入流对象提取信息。 另外,这个操作符对所有内建的数据类型都进行了重载,所以它可以从输入流对象提取出int, float, double 型数据,也可以提取字符串等数据。

  在while( cin >> i ) 中,表达式 cin >> i 返回输入流对象本身,也就是cin。但是,如果到达了文件尾或者提取操作符遇到一个非法值,这个返回值将是 false。 我们小举一个例子:如果我们试图把一个浮点数读取到一个 int 型变量中,当提取操作符遇到小数点时,它将使输入流对象置于一个错误的状态中,导致 cin 的值为 false。

猜你喜欢

转载自www.cnblogs.com/tianqizhi/p/10138475.html