1. 程式人生 > >C語言基礎下的C++入門---極其絕望的又一次入門,不過這次一定是最後一次入門!!!!!

C語言基礎下的C++入門---極其絕望的又一次入門,不過這次一定是最後一次入門!!!!!

小程式的入門(一)~~!! 

#include<iostream>
using namespace std;//名稱空間 相當於 #include<iostream.h>    -->> C92版本 
int addArray(int *addArray,int n);

int main(){
	int data[] = {0,1,2,3,4,5,6,7,8,9};
	int size = sizeof(data)/sizeof(data[0]);
	
	cout<<"結果是:"<<addArray(data,size)<<endl;//endl是結束標誌 輸出流必須得有一個結束標誌吧 
	return 0; 
} 

int addArray(int *array,int n){
	int sum = 0;
	int i;
	for(i=0;i<n;i++){
		sum += *array++;
	}
	return sum;
}

這個小程式展示了C++物件的第一次使用。物件在哪裡?就是“cout”。

C語言裡的printf是一個函式,而C++裡的cout是一個輸出流物件,他是“console out”(控制檯輸出)的縮寫,是屬於basic_ostream類的物件。ostream類在iostream標頭檔案中定義。

using namespace

  • 這是一個指定,這條指定帶給我們一個全新的概念:名字空間
  • C++標準庫所使用的所有識別符號或叫關鍵字(例如類,函式,物件等的名稱)都是在同一個特殊的名字空間(std)中來定義的(相當於java裡的包)。如果沒有使用這條指令的話,我們將需要使用std::cout這樣的語法來呼叫輸出流物件。

<<

  • 在C語言裡這個操作符叫左移操作符,在C++裡並不是說改規則了,不是左移操作符了,而是體現了C++裡的另一個特點:支援過載。過載事實上就是允許我們按照不同的方式使用同一個操作符,在不同的語境裡發揮不同的作用。

小程式入門(二)

要求:編寫一個程式,要求使用者輸入一串整數和恩義數目的空格,這些整數必須位於同一行中,但允許出現在該航中的任何位置,當用戶按下鍵盤上的enter鍵的時候,資料輸入結束。程式自動對所有的整數進行求和並打印出結果。

C語言實現:

#include<stdio.h>
int main(){
	int num,sum=0;
	char ch;
	while(scanf("%d",&num)==1){//scanf函式如果正常接收了一個指定資料 返回值是1 否則接收不正常 
		sum += num;
		while((ch=getchar())==' ') ;//這個迴圈的作用是從緩衝區獲取一個字元給ch  用來遮蔽空格
		if(ch=='\n') break;//如果獲得的非空字元是回車 就跳出迴圈 輸出計算結果
		ungetc(ch,stdin);
//如果從緩衝區獲得的字元既不是空格 也不是回車 那說明是數字(數字是以某字元的ASC||碼的形式存在ch裡的) 就要把這個數字重新退回到緩衝區否則會影響計算 		 
	}
	printf("%d",sum);
	return 0;
}

//輸入 22         22  33 44          
//結果 132

C++實現:

#include<iostream>
using namespace std;
int main(){
	int sum  = 0;
	cout<<"請輸入一串整數和任意數目的空格:";
	int i;
	while(cin>>i){//從輸入流物件中提取一個i型別的資料
//cin>>i返回輸入流物件本身 也就是cin但是如果到達了檔案尾或提取操作符遇到一個非法值 返回false
		sum += i;
		while(cin.peek()==' ') cin.get();//從緩衝區獲取一個字元下面有關於這個函式的講解
		if(cin.peek()=='\n') break;
	}
	cout<<"結果是:"<<sum<<endl;
	return 0;
}

cin

  • C++實現的例子裡使用了流的物件cin。這個物件的型別是istream,他知道如何從使用者終端讀取資料。
  • cin>>i;cin輸入操作符又稱為提取操作符,他一次從輸入流物件中提取一個i型別的資料,在這個例子裡i是整數,所以就從輸入流裡讀取一個整數型別的資料。
  • 當用戶進行鍵盤輸入的時候,對應的字元將輸入到作業系統的鍵盤緩衝區中。這樣當用戶點選enter建的時候,作業系統把鍵盤緩衝區的內容傳輸到cin流的內部緩衝區,">>"操作符隨後從這個緩衝區提取需要的資訊。

>>

  • 最初定義為右移操作符,在C++中進行了過載,當他按照這裡所提示的方式使用的時候,他就用於從輸入流物件提取資訊。
  • 另外,這個操作符對所有內建的資料型別都進行了過載,所以他可以從輸入流物件中提取字串,float,double,int等資料
  • cin>>i返回輸入流物件本身 也就是cin但是如果到達了檔案尾或提取操作符遇到一個非法值 返回false。

cin cout物件的多個方法介紹

  • cin.ignore();:cin.ignore(a,ch)方法是從輸入流(cin)中提取字元,提取的字元被忽略(ignore),不被使用。每拋棄一個字元,它都要計數和比較字元:如果計數值達到a或者被拋棄的字元是ch,則cin.ignore()函式執行終止;否則,它繼續等待。它的一個常用功能就是用來清除以回車結束的輸入緩衝區的內容,消除上一次輸入對下一次輸入的影響。

例如:比如可以這麼用:cin.ignore(1024,'\n'),通常把第一個引數設定得足夠大,這樣實際上總是隻有第二個引數'\n'起作用,所以這一句就是把回車(包括回車)之前的所以字元從輸入緩衝(流)中清除出去。

  • cin.getline();:接收一個字串,可以接收空格並輸出,需包含“#include<string>”
#include <iostream> 
using namespace std; 
main () 
{ 
char m[20]; 
cin.getline(m,5); 
cout<<m<<endl; 
}

//輸入:jkljkljkl 
//輸出:jklj
//接受5個字元到m中,其中最後一個為'\0',所以只看到4個字元輸出;
  • cin.get();:    1.cin.get(字元變數名)可以用來接收字元;2.cin.get(字元陣列名,接收字元數目)用來接收一行字串,可以接收空格;3.cin.get(無引數)沒有引數主要是用於捨棄輸入流中的不需要的字元,或者捨棄回車
//用法1
#include <iostream> 
using namespace std; 
main () 
{ 
char ch; 
ch=cin.get();               //或者cin.get(ch); 
cout<<ch<<endl; 
}
//輸入:jljkljkl 
//輸出:j
#include <iostream> 
using namespace std; 
main () 
{ 
char a[20]; 
cin.get(a,20); 
cout<<a<<endl; 
}
//輸入:jkl jkl jkl 
//輸出:jkl jkl jkl
//輸入:abcdeabcdeabcdeabcdeabcde (輸入25個字元) 
//輸出:abcdeabcdeabcdeabcd              (接收19個字元+1個'\0')

 

  • cin.peek();:cin.peek()的返回值是一個char型的字元,其返回值是指標指向的當前字元,但它只是觀測
    指標停留在當前位置並不後移;如果要訪問的字元是檔案結束符,則函式值是EOF(-1)
  • cout.precision();: cout.precision()其實是輸出流cout的一個格式控制函式,也就是在iostream中的一個成員函式。precision()返回當前的浮點數的精度值,而cout.precision(val)其實就是在輸出的時候設定輸出值以新的浮點數精度值顯示,即小數點後保留val位
  • cout.width();:函式的返回值:當前輸出寬度