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>。
標准函數
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語言輸出格式和類型
C語言里通過printf函數,可以輸出任意格式和任意類型。
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 * 字元串。輸出字元串中的字元直至字元串中的空字元(字元串以'