神奇的C語言七 為什麼C 要拋棄printf

2022-03-10 15:16:32 字數 3471 閱讀 2577

1樓:匿名使用者

1、最重要的原因當然是c++提供了流物件『>>』和『<<』,它們代表了新觀念。

流物件能輸出物件,而printf函式和scanf函式不能。

2、printf本身有問題,它不是型別安全的。

舉個例子。下面的程式會輸出什麼呢?

#include

int main()

這個時候我們需要對a進行強制型別轉換,否則輸出結果就不是我們想要的3。

什麼原因呢?這涉及到float、double、int的位分布問題了。

3、首先讓我們觀察一下printf函式和scanf函式的宣告,它們分別是:

int printf( char *, ...);

int scanf( char *, ...);

我們看到,除了第乙個引數要求是char *以外,其餘引數的型別不限,個數也不限。

從這一點能夠看出,c語言對函式引數的資料型別是不做嚴格的檢查的,

但是c++語言卻是要做嚴格的型別檢查的,這與c++支援函式過載有關。

4、c++中其實也可以用printf,只不過可能會出一些問題,所以不提倡使用。

舉例,在乙個程式裡,如果cin、cout和scanf、printf混合使用,

系統不能保證他們的執行次序是正確的,

假如我們希望輸出『你好』,也許輸出的是『好你』。

2樓:匿名使用者

1、printf不能直接輸出乙個類;

2、printf本身有問題,它不是型別安全的;

舉個例子。下面的程式會輸出什麼呢?

[cpp] view plain copyint main(){

float a = 3.14;

printf("%d\n", a);

return 0;

會輸出3嗎?你可以試一試。這個時候我們需要對a進行強制型別轉換,否則輸出結果就不是我們想要的3。

什麼原因呢?這涉及到float、double、int的位分布問題了。這就體現了printf的不友好。

3、c++中其實也可以用printf,只不過可能會出一些問題,所以不提倡使用。

例如,同時使用cout和printf,可能會導致輸出順序出現偏差。

為什麼這個c語言程式在dev c++上執行時,去掉了scanf後面的printf,執行時就沒有輸入輸出,直接結束。

3樓:匿名使用者

有可能是因為輸入緩衝區沒有清空,所以沒有讓使用者輸入的動作。在scanf("%d",&a);之前做一次清空輸入緩衝區的動作應該就會正常了,即呼叫一次 fflush(stdin);

沒有輸出可能是因為沒有遇到換行符,部分編譯器是會這樣的,要遇到換行才去輸出,你可以在return 0;之前輸出一次換行,應該就可以了,即呼叫一次 printf("\n");

求c語言和c++大神解答,printf怎麼轉成cout輸出語句

4樓:匿名使用者

cout輸出不需要指定輸出的格式型別,其他的和printf一樣的,endl 表示換行,當然 \n也還是可以用的. cout << "\n"

cout << "trim : "<< s.trim()  << endl;

cout << "[3] : " <

5樓:匿名使用者

printf("a=",a);

轉換成count<<"a=="<

c++裡面可以用printf語句嗎

6樓:匿名使用者

可以,在輸出格式和效率方面比c++佔優勢

7樓:匿名使用者

如果樓主要是學習c++就盡量別用printf, 用cout輸出這樣可以加深對c++輸出流的理解和應用。

但是一旦你使用熟練了。如果要去解決問題。

個人還是比較喜歡在c++中使用printf,因為printf在輸出大量的資料的時候,會體現出它的優勢。

就是printf()的輸出比cout快,特別你程式如果有大量的輸出的時候。

同理scanf()的輸入也比cin塊,特別程式中有大量的輸入的時候,所以語言就是乙個工具,熟悉了工具之後,就選擇自己喜歡的,既然c++相容c為什麼不用效率高的輸入輸出哪,

但是小規模資料,差別不大。

8樓:匿名使用者

這個問題問得好,說明你還沒入門!呵呵!不要氣餒,慢慢來!

c語言裡用printf是作為函式來呼叫的,(你可以在譚浩強的書後面或者能查到庫函式的地方查檢視)!

而c++預設的輸出函式是乙個叫cout的物件,是呼叫cout這個物件的乙個類函式,所以預設情況下是肯定不行的!

當然,人是萬能的,沒有什麼不可能。你可以在c++裡新增乙個printf函式然後呼叫啊,絕對可以的!!!

9樓:匿名使用者

用是可以的,但一般不建議用,而更應該用cout,用它比用printf更方便.

10樓:匿名使用者

c++是相容c的啊,在c 中可用的東西,在c++裡都可用

11樓:愛

c或c++都可以用printf

c語言,visual c++ 怎麼讓輸出的值保持乙個位置不停地更新,而不是乙個佔一格的printf出來?

12樓:

看了許久才明白樓主的意思,在控制台的程式麼,你可以試著敲足足夠的換行,使得換一次就到達第二頁,看上去位置還在原來的地方。

也就是printf("\n");多寫幾個啦。希望對你有幫助/* note:your choice is c ide */#include "stdio.h"

#include "windows.h"

//填充螢幕

//row 行數

void fillscreen(int row);

void main()

}void fillscreen(int row){int i;

for(i=0;i

寫了個demo,你看看是不是想要的

13樓:匿名使用者

移動游標啊! 每次輸出使游標退回來,然後下一次輸出覆蓋前一次的輸出就行了!上面的那種方法太*****, 悲催。

你直接呼叫乙個api吧游標移動一下,這種方法可以修改控制台輸出的內容!

或者還有一種方法:

你的程式顯示 60 % 肯定是在同一行,那麼每次輸出 **%的時候 在字串後面加上 \r , 然後下一次輸出的時候在把這行重新輸出一遍就可以了。

14樓:匿名使用者

利用退格鍵啊,printf("\b%d",i)

15樓:紅天綠花和藍草

採納的描述太麻煩,聽我的,標頭檔案加#include,用printf(" 「這裡是你要輸出的東西」 \r");

精髓:printf內活用\r

解決不了你的問題我吃屎

c語言中p是什麼意思,C語言中 p 是什麼意思

p p 首先,它是乙個 陣列,陣列裡面儲存的是指標 p 則不同,首先它是版乙個指標,然後權,它指向乙個陣列,但通常,再定義的時候需要指定所指向陣列的大小。示例 include int main int argc,char argv char指標陣列,兩個元素,分別指向hello和worldprint...

為什麼C語言輸出為,為什麼C語言輸出為

你的題目不知道是什麼意思,只是改正了語法錯誤,現在能執行了,不知是否可以?include 此行有改動 intmain printf s lf th lf s,h return0 你還把printf達成了print 我第一次見先列印再計算還問為什麼,你沒學c吧,為了考2級?因為你把這兩句的順序寫反了,...

為什麼這道c語言題要加s2,為什麼這道c語言題要加 s2 i 0 ???

對於bai這個程式,strcat函式把s2綴合到s1上。du此時s1比s2的有效zhi 字元長度要長,接下來dao的步驟是讓專s2的字元對應與截止到屬s1的空字元之前的所有對應位置的字元同步 不包括s1的空字元 而由於s1比s2長,所以導致s2被同步後,並不正確地以空字元結束,如果不對s2做結尾處理...