導航:首頁 > 源碼編譯 > 編譯輸出和標准輸出

編譯輸出和標准輸出

發布時間:2022-08-18 07:11:49

1. 關於C語言標准輸出函數printf的問題

這個問題考察的是運算符的優先順序,++和--的優先順序高於取反(-)
i++(或者i--)表示先取用i的值,然後再進行自加(或者自減)運算
++i(或者--i)表示先對i進行自加(或者自減)運算,再取用i的新值
多數編譯器會從右向左對參數壓棧,所以printf函數會從右向左依次計算參數值。
i=8,->(-i--)=-8,此時i=7
->(-i++)=-7,此時i=8
->(i--)=8,此時i=7
->(++i)=8,此時i=8
->(--i)=7,此時i=7
->(++i)=8,此時i=8
->i=8
但是,壓棧順序沒有硬性規定,所以不同編譯器可能有不同的壓棧操作,結果會有不同

2. linux輸出·輸入文件和標准輸入 標准輸出是什麼意思啊

Unix/Linux/BSD 都有三個特別文件,分別
1)標准輸入 即 STDIN , 在 /dev/stdin ,
一般指鍵盤輸入, shell里代號是 0
2) 標准輸出 STDOUT, 在 /dev/stdout,
一般指終端(terminal), 就是顯示器, shell里代號是 1
3) 標准錯誤 STDERR, 在 /dev/stderr
也是指終端(terminal), 不同的是, 錯誤信息送到這里
shell里代號是 2

2, 3用些例子再表達一下

User@User-PC ~
$ ls /dev/stdin
/dev/stdin@

User@User-PC ~
$ ls -l /dev/std*
lrwxrwxrwx 1 User Users 15 Mar 1 2008 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 User Users 15 Mar 1 2008 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 User Users 15 Mar 1 2008 /dev/stdout -> /proc/self/fd/1

就是這些東西了,呵呵

User@User-PC ~
$ ls 1> log1.txt

User@User-PC ~
$ cat log1.txt
Mail/
News/
a.txt
aa*
awkscr
b.txt
bb*
bin/
cc
cgitest.rex*
dd*
irc-sh*
junk
lib/
log1.txt
lynx.cfg
matrix/
perlscr*
pp*
rexx_script/
rrr
testawk
tmp/
trash

將標准輸出導向到文件, 縮寫就是 ls > log1.txt

User@User-PC ~
$ ls llll 1> log2.txt
ls: 無法存取 llll: No such file or directory

再次執行,但這次沒有這個文件llll, 出現錯誤訊息

User@User-PC ~
$ cat log2.txt

User@User-PC ~
$ file log2.txt
log2.txt: empty

輸出沒有導向到文件,文件是空文件

User@User-PC ~
$ ls llll 2> log2.txt

User@User-PC ~
$ cat log2.txt
ls: 無法存取 llll: No such file or directory

User@User-PC ~
$

再次執行剛才的命令,只是將 1> log2.txt 改為 2> log2.txt
這次就成功把錯誤訊息導向至文件了,呵呵,
就是這樣
所以,將標准輸出和標准錯誤 一同導向到一個文件里,就得這樣表達

命令 2>&1 > 檔案, 如
User@User-PC ~
$ echo 123 | if grep -E '[0-9]+' 2>&1 > /dev/null ; then echo "This is number."; fi
This is number.

grep 標准輸出和標准錯誤 都導向到系統『黑洞』,不會再屏幕上顯示什麼
, 明白了吧? 呵呵

3. 求大神……解釋一下…c語言中: 「printf是c語言編譯系統提供的標准輸出函數,其聲明

具體的函數體文件沒有放在頭文件中,而是放在其他的.c文件中,但是函數聲明放在了stdio.h中,比如說,我在Hello.c文件中寫了函數體:
void outPut()
{
printf("Hello,world!");
}
但是我想在其他的文件中使用這個函數,那麼我就在自定義的頭文件"OutPut.h"中聲明函數即可:
void outPut();
當我想在其他的文件中使用outPut函數,我只需要包含此頭文件就可以了:譬如,我想在Thank.c文件中使用,我只需在文件頭使用#include「OutPut.h」,調用的時候只需要直接調用outPut();就可以直接調用了。你以後如果做工程的話老師會給你們講的,你可以在visiual c++6.0中先自己建立一個工程練一練。

4. 在C語言中標准輸入輸出語句應該如何編寫操作

Turbo C 2.0標准庫提供了兩個控制台格式化輸入、輸出函數 scanf();和printf();這兩個函數可以在標准輸入輸出設備上以各種不同的格式讀寫數據。scanf()函數用來從標准輸入設備(鍵盤)上讀數據,printf()函數用來向標准輸出設備(屏幕)寫數據。下面詳細介紹這兩個函數的用法。
1.標准輸入語句
scanf()函數是格式化輸入函數,它從標准輸入設備(鍵盤)讀取輸入的信息。其調用格式為:scanf(<格式化字元串>,<地址表>);
格式化字元串包括以下三類不同的字元;
(1).空白字元:空白字元會使scanf()函數在讀操作中略去輸入中的一個或多個空白字元。
(2).非空白字元:一個非空白字元會使scanf()函數在讀入時剔除掉與這個非空白字元相同的字元。
(3).格式化說明符:以%開始,後跟一個或幾個規定字元,用來確定輸出內容格式。

5. C++ cout, clog,cerr

cerr與cout的主要區分就是,cout輸出的信息可以重定向,而cerr只能輸出到標准輸出(顯示器)上。

例如下面程序編譯後生成test.exe
// test.cpp

#include <iostream.h>

int main()
{
cout << "hello world---cout" << endl ;
cerr << "hello world---cerr" << endl ;
return 0;
}

在命令行模式下鍵入下面的命令:
test >>cout.txt

運行結果是:
在生成的cout.txt文件中輸出了"hello world---cout"
同時在顯示器上輸出了"hello world---cerr"
也就是說cout的輸出可以重定向到一個文件中,而cerr必須輸出在顯示器上。
clog流也是標准錯誤流,作用和cerr一樣,區別在於cerr不經過緩沖區,直接向顯示器輸出信息,而clog中的信息存放在緩沖區,緩沖區滿或者遇到endl時才輸出.

對於為什麼有cerr和clog
比如,你的程序遇到調用棧用完了的威脅(無限,沒有出口的遞歸)。

你說,你到什麼地方借內存,存放你的錯誤信息?

所以有了cerr。其目的,就是在你最需要它的緊急情況下,還能得到輸出功能的支持。

緩沖區的目的,就是減少刷屏的次數——比如,你的程序輸出聖經中的一篇文章。不帶緩沖的話,就會每寫一個字母,就輸出一個字母,然後刷屏。有了緩沖,你將看到若干句子「同時」就出現在了屏幕上(由內存翻新到顯存,然後刷新屏幕)。

6. 在C語言中標准輸出語句如何才是正確的運用

printf()函數是格式化輸出函數,一般用於向標准輸出設備按規定格式輸出信息。在編寫程序時經常會用到此函數。printf()函數的調用格式為:
printf(<格式化字元串>,<參量表>);
其中格式化字元串包括兩部分內容:一部分是正常字元,
這些字元將按原樣輸出;另一部分是格式化規定字元,以%開始,後跟一個或幾個規定字元,用來確定輸出內容格式。
參量表是需要輸出的一系列參數,其個數必須與格式化字元串所說明的輸出參數個數一樣多,各參數之間用,分開,且順序一一對應,否則將會出現意想不到的錯誤。

7. stdio 是什麼意思

stdio 就是指 「standard input & output"(標准輸入輸出)所以,源代碼中如用到標准輸入輸出函數時,就要包含這個頭文件。

例如c語言中的printf("%d",i);scanf("%d",&i);等函數。

一般地,在C語言或C++中,會把用來#include的文件的擴展名叫 .h,稱其為頭文件。 #include文件的目的就是把多個編譯單元(也就是c或者cpp文件)公用的內容,單獨放在一個文件里減少整體代碼尺寸;或者提供跨工程公共代碼。在現行的c++版本中,應用這個頭文件應是#include<cstdio>。

(7)編譯輸出和標准輸出擴展閱讀:

標准函數

intgetchar()//從標准輸入設備讀入一個字元

intputchar()//向標准輸出設備寫出一個字元

intscanf(char*format[,argument…])//從標准輸入設備讀入格式化後的數據

intprintf(char*format[,argument…])//向標准輸出設備輸出格式化字元串

chargets(char*string)//從標准輸入設備讀入一個字元串

intputs(char*string)//向標准輸出設備輸出一個字元串

intsprintf(char*string,char*format[,…])//把格式化的數據寫入某個字元串緩沖區

8. C語言中什麼是標准輸入和標准輸出

執行一個shell命令行時通常會自動打開三個標准文件,即標准輸入文件(stdin),通常對應終端的鍵盤;
標准輸出文件(stdout)和標准錯誤輸出文件(stderr),這兩個文件都對應終端的屏幕。進程將從標准輸入文件中得到輸入數據,將正常輸出數據輸出到標准輸出文件,而將錯誤信息送到標准錯誤文件中。

9. c語言關於標准輸入和標准輸出

while循環在getchar()獲取的是結束符時跳出循環。

getchar有一個int型的返回值.當程序調用getchar時.程序就等著用戶按鍵.用戶輸入的字元被存放在鍵盤緩沖區中.直到用戶按回車為止(回車字元也放在緩沖區中).當用戶鍵入回車之後,getchar才開始從stdio流中每次讀入一個字元.getchar函數的返回值是用戶輸入的第一個字元的ASCII碼,如出錯返回-1,且將用戶輸入的字元回顯到屏幕.如用戶在按回車之前輸入了不止一個字元,其他字元會保留在鍵盤緩存區中,等待後續 getchar調用讀取.也就是說,後續的getchar調用不會等待用戶按鍵,而直接讀取緩沖區中的字元,直到緩沖區中的字元讀完為後,才等待用戶按鍵. (from網路)

10. C語言輸出格式和類型

  1. C語言里通過printf函數,可以輸出任意格式和任意類型。

  2. printf()函數是格式化輸出函數, 一般用於向標准輸出設備按規定格式輸出信息。
    printf()函數的調用格式為: printf("<格式化字元串>", <參量表>)。
    格式輸出,它是c語言中產生格式化輸出的函數(在 stdio.h 中定義)。用於向終端(顯示器、控制台等)輸出字元。格式控制由要輸出的文字和數據格式說明組成。要輸出的的文字除了可以使用字母、數字、空格和一些數字元號以外,還可以使用一些轉義字元表示特殊的含義。
    原型:extern void printf(const char *format,...);
    功能:在c語言中產生格式化輸出的函數(定義在 stdio.h 中),其向終端(顯示器、控制台等)輸出字元。
    用法:
    format
    Format 參數是包含三種對象類型的一個字元串:
    * 無格式字元復制到輸出流;
    * 轉換規范,每個規范導致在值參數列表中檢索 1 個或更多個項;
    * 轉義序列。
    通常意義上format的格式如下:
    %[flags][width][.prec][F|N|h|l]type
    規定輸出數據的格式,具體如下:[1]
    type
    type的字元用於規定輸出數據的類型,含義如下:
    字元 對應數據類型 含義
    d / i int 接受整數值並將它表示為有符號的十進制整數,i是老式寫法
    o unsigned int 無符號8進制整數(不輸出前綴0)
    u
    unsigned int 無符號10進制整數
    x / X
    unsigned int 無符號16進制整數,x對應的是abcdef,X對應的是ABCDEF(不輸出前綴0x)
    f(lf)
    float(double) 單精度浮點數用f,雙精度浮點數用lf(尤其scanf不能混用)
    e / E
    double 科學計數法表示的數,此處"e"的大小寫代表在輸出時用的「e」的大小寫
    g / G
    double 使用以上兩種中最短的形式,大小寫的使用同%e和%E
    c
    char 字元型。可以把輸入的數字按照ASCII碼相應轉換為對應的字元
    s / S
    char * / wchar_t * 字元串。輸出字元串中的字元直至字元串中的空字元(字元串以'『結尾,這個''即空字元)
    p
    void * 以16進制形式輸出指針
    n int * 到此字元之前為止,一共輸出的字元個數,不輸出文本
    %
    無輸入
    不進行轉換,輸出字元『%』(百分號)本身
    m 無 列印errno值對應的出錯內容,(例: printf("%m "); )
    註:%g、%G在小數點位數四位或指數大於等於精度時用%e、%E,否則用%f。
    flags
    flags 規定輸出樣式,取值和含義如下:
    字元
    字元名稱 說明
    - 減號 左對齊,右邊填充空格(默認右對齊)
    +
    加號 在數字前增加符號 + 或 -
    0
    數字零 將輸出的前面補上0,直到占滿指定列寬為止(不可以搭配使用「-」)
    空格 輸出值為正時加上空格,為負時加上負號
    #
    井號
    type是o、x、X時,增加前綴0、0x、0X
    type是e、E、f、g、G時,一定使用小數點
    type是g、G時,尾部的0保留
    width
    用於控制顯示數值的寬度,取值和含義如下:
    n(n=1,2,3...): 寬度至少為n位,不夠以空格填充。
    * 格式列表中,下一個參數還是width
    width是一個可選的指定最小值欄位寬度的十進制數字字元串。如果轉換值字元少於欄位寬度,該欄位將從左到右按指定的欄位寬度填充。如果指定了左邊調整選項,欄位將在右邊填充。如果轉換結果寬於欄位寬度,將擴展該欄位以包含轉換後的結果。不會發生截斷。然而,小的精度可能導致在右邊發生截斷。
    prec
    用於控制小數點後面的位數,取值和含義如下:
    無按預設精度顯示0
    當type=d,i,o,u,x時,沒有影響;
    type=e,E,f時,不顯示小數點
    n(n=1,2,3...)
    當type=e,E,f時表示的最大小數位數;
    type=其他,表示顯示的最大寬度
    prec是指可選的精度。精度是一個 .(點)後跟十進制數字字元串。如果沒有給出精度,按 0(零)對待。精度指定:
    * d、o、i、 u、x 或 X 轉換的最少數字顯示位數。
    * e 和 f 轉換的基數字元後的最少數字顯示位數。
    * g 轉換的最大有效數字位數。
    * s 轉換中字元串的最大列印位元組數目。
    F|N|h|l
    表示指針是否是遠指針或整數是否是長整數
    F 遠指針
    N 近指針
    h 短整數(short int)
    l 長整數(long int) (此處如果與d搭配為%lld則為long long int(C99),與f搭配為%llf則為long double(C99))
    [Argument]
    包含需要輸出的數據,可以是常量(字元常量、數字常量、字元串常量),變數,以及運算式。此處的數據應當與前面的format中的格式控制符一一對應(如果不對應會產生錯誤)。

閱讀全文

與編譯輸出和標准輸出相關的資料

熱點內容
fibonacci數列演算法 瀏覽:775
產品經理要和程序員吵架嗎 瀏覽:252
grub2命令行 瀏覽:618
無法獲取加密卡信息 瀏覽:774
雲伺服器網卡充值 瀏覽:509
編程就是軟體 瀏覽:49
伺服器如何添加許可權 瀏覽:437
引用指針編程 瀏覽:851
手機加密日記本蘋果版下載 瀏覽:63
命令行括弧 瀏覽:176
java程序升級 瀏覽:490
排序演算法之插入類 瀏覽:227
gcccreate命令 瀏覽:73
海爾監控用什麼app 瀏覽:64
系統盤被壓縮開不了機 瀏覽:984
linuxredis30 瀏覽:541
狸窩pdf轉換器 瀏覽:696
ajax調用java後台 瀏覽:906
活塞式壓縮機常見故障 瀏覽:614
break演算法 瀏覽:731