C語言基礎下的C++入門---極其絕望的又一次入門,不過這次一定是最後一次入門!!!!!
阿新 • • 發佈:2018-11-29
小程式的入門(一)~~!!
#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();:函式的返回值:當前輸出寬度