1. 程式人生 > >C&C++

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。