c 中,多個要輸出的資料寫在cout中的問題

2021-04-20 14:01:36 字數 4470 閱讀 7068

1樓:匿名使用者

這主要是需要你理解a++和++a的區別:

1.a++: 先返回a的值, 再計

算a=a+1

1.++a: 先計算a=a+1,再返回a的值cout<函式經歷了回如下步驟.

1.最右側答a++首先輸出了a的值:10

2.a=a+1使得a=11.

3.左邊的cout<

希望對你有幫助

2樓:幻の上帝

c++的stl中cout的「<<」輸出物件是通過運算子過載實現的。運算子過載不能改變運算子原有的優先順序和結合順序。

《具有左結合性,即連續的《表示式中先執行左邊的《得到結果後,再代入後繼表示式的值,執行接下來的<<(這裡的「執行」指執行過載實現裡的輸出指令)。

《的左運算元是輸出物件cout或它的引用;右運算元可以是不同的型別,根據資料型別選擇不同的輸出過程以便正確地輸出值;同時cout的《運算也有返回值,為cout自身的引用,可以這樣就能通過上面的巢狀來輸出多個值。

cout<

(((cout<

但是要注意,儘管代入表示式的順序(不是ls所說的入棧順序,這裡的順序決定具體傳遞哪個引數,在傳遞引數之前決定,和傳遞引數本身的順序無關;傳遞引數和恢復堆疊的方式由呼叫約定(諸如__cdecl或是__stdcall)確定)是由優先順序(以上的括號)定死的,但在此之前的需要代入表示式的各個不同子表示式之間的求值順序並不是確定的,不同的編譯環境下可以有不同的行為。例如在dev-c++下測試結果為10,10,而vs2008下的情況和lz所說相同。出現lz的情況時,這條語句等價於:

(((cout<<11)<<",")<<10)<

可見傳遞進《是a的引用,先計算了a++,然後再代入了前面的部分,最後整體輸出。對於這種標準中沒有定義,平臺實現可以有差異的涉及了多個序列點(a++運算子***表示式和a這個表示式之間形成兩個序列點)不明確的情形,完全不必糾結其中的求值順序——這是沒有意義的。事實上,現實程式設計中應該儘量避免這種使用,以免出錯。

而輸出順序從左到右,是預先定義的,由cout的《過載運算子內部實現(至於這樣定義的原因,是為了使表示式直觀地符合順序輸出的語義)。

====

[原創回答團]

3樓:

這個問題不必太過復追求

對於不通的編制

譯器,得出bai來的結果並不一du樣

首先,入棧zhi順序,從右往左

dao但是在入棧前的計算順序沒有明確規定,依編譯器而定你可以參考下

4樓:止樂尉遲書

這主要是copy需要你理解a++和++a的區別bai:

1.a++:

先返回a的值,

再計算dua=a+1

1.++a:

先計算a=a+1,再返回a的值

cout

1.最右側

daoa++首先輸出了a的值:10

2.a=a+1使得a=11.

3.左邊的cout<

希望對你有幫助

c++中用cout函式怎樣實現格式輸出

5樓:兔丞飛

#include

#include //不要忘記包含此標頭檔案

using namespace std;

int main()

擴充套件資料

#include // 在c和一些古老的c++中是stdio.h,新標準為了使標準庫

// 的標頭檔案與使用者標頭檔案區別開,均推薦使用不用副檔名

// 的版本,對於原有c庫,不用副檔名時標頭檔案名前面要加c

class myoutstream

;const myoutstream& myoutstream::operator <<(int value)const

const myoutstream& myoutstream::operator <<(char* str)const

myoutstream myout;//隨時隨地為我們服務的全域性物件myout

int main()

6樓:匿名使用者

c++**為:

#include

#include //不要忘記包含此標頭檔案int a;

cout

寬度為n,setiosflags(ios::left)設定輸出資料在本域寬範圍內向左對齊。

7樓:何度千尋

首先要加上標頭檔案#include

#include

#include //不要忘記包含此標頭檔案

using namespace std;

int main()

{int a;

cout<<"input a:";

cin>>a;

cout<<"dec:"<制形式輸出整數

cout<<"hex:"<進位制形式輸出整數a

cout<<"oct:"<

輸出結果如下:

input a:34↙(輸入a的值)

dec:34                   (十進位制形式)

hex:22                   (十六進位制形式)

oct:42                   (八進位制形式)

china               (域寬為)

*****china               (域寬為,空白處以'*'填充)

pi=3.14285714e+00        (指數形式輸出,8位小數)

pi=3.1429e+00            (指數形式輸出,4位小數)

pi=3.143                 (小數形式輸出,精度仍為)

8樓:匿名使用者

左對齊:cout <意要加上標頭檔案#include

io 流控制標頭檔案, 主要是一些操縱用法如setw(int n),setprecision(int n)

9樓:匿名使用者

常用的是setw();

10樓:400和260和

cout不是函式,是一個物件!

簡單c++ cout<< 語句輸出問題

11樓:匿名使用者

你好!1. 你的問題,第一行標頭檔案中include缺少了字母e。(細心,哈哈哈)

2.正如上位仁兄所說,這個問題確實對於不同的編譯器,結果很難預料,所以,專業人員大都不會寫出很難讀懂,並且不知道程式怎樣執行的程式。

以上原始碼在我的dev-c++5中編譯執行顯示輸出為:01

234 3,最後解答你的問題:首先你要明白輸出流「<<」的概念,輸出cout對應的流運算是從右向左進行的,將要輸出的內容輸入至緩衝區,遇到endl才一次輸出。換句話說:

cout流先進行了四次自加運算,然後從最右邊的x向左邊的x輸出,而輸出時,更麻煩,解釋如下:

首先對cout中的四個x從左向右編號,第一個x=0,執行第一個自加運算,第二個x=1,執行第二個自加,第三個x=2,執行第三個自加,第四個x=3,執行第四個自加,此時x=4.

下面輸出,根據流的運算,從右邊向左輸出,輸出第四個x=3,換行;輸出第三個x=2,換行……故而輸出:321

0最後執行第二個輸出流,輸出x=4.

祝你好運!!

都是c++之路上摸爬滾打的難兄難弟,不要你的財富值,給個好評總行吧??o(∩_∩)o哈哈哈~

12樓:匿名使用者

這個我試過,在一個cout語句中,是從右到左邊執行的。所以在輸出第一個x的時候x++已經執行了3次,然後輸出第二個x的時候x++已經執行了兩次。後面的同理。

而第二個cout跟第一個不是一條語句,要等前面一條cout語句執行完才會執行這一條。在這之前已經執行了4次x++。所以這個時候x已經為4了。

13樓:我是夏鋒

x++;是在編譯的時候就算過了,而在編譯的時候是從右到左編譯,所以第一個x++其實已經算了三次了,第二個算了兩次,第三個算了一次,第四個沒有算!所以第一個cout語句輸出是32

10下一個cout語句是在上一個cout語句便已結束之後,再編譯的,所以是執行了四次,所以輸出4,就是這樣了!

14樓:

這個問題其實沒有什麼意義,因為在不同的編譯器下的輸出不一樣

所以最好不要在同一條語句內出現兩次對一個變數的自增或自減,會造成誤解。

如下 為什麼C語言讀取檔案中的資料並輸出時有亂碼出現?本來輸入的是數字,然後從檔案中讀取後就變漢字

估計是你文字的儲存格式問題。重新另存為一份utf 8格式的檔案。utf 8編碼格式中的數字佔用一個位元組。而ansi或其他字元是佔用兩個位元組的。c語言檔案輸出時,輸入資料後為什麼會出現亂碼 可能是輸入緩衝區之前未清空 使用這個函式將檔案緩衝區清空 memset buffer,0,sizeof bu...

c語言輸入任意多個整數並輸出這些數的和

include int main int sum 0,t,num printf 輸入整數個數 n scanf d num for int i 0 i只要總和不超過int的最大值,算的結果都能正常 include define m 100 想輸入多少輸入多少,自己隨便改,不過不能大於214748364...

c解決方案中多個專案,哪些是打包要的檔案

你要用到哪一個就把哪一個的bin打包就行了,這個專案所需要的dll會自動包含進來 c 中為什麼要在一個解決方案下建立很多專案 因為很多情況一個軟體是由多個功能組合而成的,每個功能由不同的人編寫。所以為的是讓大家彼此編寫的東西相互銜接,這是一個物件導向軟體工程的概念,所以要有多個專案,將來別人編輯好了...