main()函數(shù)是必須有的.其它的函數(shù)還有很多,其中編譯系統(tǒng)有提供許多的函數(shù),一般教的C程序的教材的背后的附錄里都有,你可以去看看。除了那些外,你還可以自己定義新的函數(shù)(但得符合要求)。
網(wǎng)站的建設創(chuàng)新互聯(lián)建站專注網(wǎng)站定制,經(jīng)驗豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設計體驗!已為除甲醛等企業(yè)提供專業(yè)服務。
答案是肯定的,必須有且僅有一個main()函數(shù)。程序總是從main函數(shù)開始執(zhí)行,并且在main函數(shù)中結(jié)束。
C語言必須要有一個main函數(shù),而且只能有一個main函數(shù),這個函數(shù)叫主函數(shù),它是第一個運行的函數(shù)。
一般來說,主函數(shù)應放在最后,其他被調(diào)用函數(shù)放在主函數(shù)前面。這樣的話,其他被調(diào)用函數(shù)可以不予先聲明。如果其他被調(diào)用函數(shù)放在了主函數(shù)后面,則在主函數(shù)之前一定要事先對被調(diào)用函數(shù)加以聲明。
C語言中的主函數(shù)固定名為:main(),每個系統(tǒng)中必須有一個,且只能有一個。它 是第一個運行的函數(shù)。
一般情況下,main()寫在文件的最后面,其他被調(diào)用的函數(shù)放在前面,這樣定義函數(shù)之前可以不加聲明,如果放在主函數(shù)之后,則必須先聲明,再定義,再被調(diào)用。
C語言輸入輸出函數(shù)有很多,標準I/O函數(shù)中包含了如下幾個常用的函數(shù):
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
int
getc(FILE
*fp)
getc主要是從文件中讀出一個字符.常用的判斷文件是否讀取結(jié)束的語句為
(ch
=
getc(fp))
!=
EOF.EOF為文件結(jié)束標志,定義在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定義在stdlib.h中一樣,文件也可以被理解為一種流,所以當fp為stdin時,getc(stdin)就等同于getchar()了.
int
putc(int
ch,FILE
*fp)
putc主要是把字符ch寫到文件fp中去.如果fp為stdout,則putc就等同于putchar()了.
int
getchar(void)
getchar主要是從標準輸入流讀取一個字符.默認的標準輸入流即stdio.h中定義的stdin.但是從輸入流中讀取字符時又涉及到緩沖的問題,所以并不是在屏幕中敲上一個字符程序就會運行,一般是通過在屏幕上敲上回車鍵,然后將回車前的字符串放在緩沖區(qū)中,getchar就是在緩沖區(qū)中一個一個的讀字符.當然也可以在while循環(huán)中指定終止字符,如下面的語句:while
((c
=
getchar())
!=
'#')這是以#來結(jié)束的.
int
putchar(int
ch)
putchar(ch)主要是把字符ch寫到標準流stdout中去.
char
*
gets(char
*str)
gets主要是從標準輸入流讀取字符串并回顯,讀到換行符時退出,并會將換行符省去.
int
puts(char
*str)
puts主要是把字符串str寫到標準流stdout中去,并會在輸出到最后時添加一個換行符.
char
*fgets(char
*str,
int
num,
FILE
*fp)
str是存放讀入的字符數(shù)組指針,num是最大允許的讀入字符數(shù),fp是文件指針.fgets的功能是讀一行字符,該行的字符數(shù)不大于num-1.因為fgets函數(shù)會在末尾加上一個空字符以構(gòu)成一個字符串.另外fgets在讀取到換行符后不會將其省略.
int
fputs(char
*str,
file
*fp)
fputs將str寫入fp.fputs與puts的不同之處是fputs在打印時并不添加換行符.
int
fgetc(FILE
*fp)
fgetc從fp的當前位置讀取一個字符.
int
fputc(int
ch,
file
*fp)
fputc是將ch寫入fp當前指定位置.
int
fscanf(FILE
*fp,
char
*format,
輸入列表)
fscanf按照指定格式從文件中出讀出數(shù)據(jù),并賦值到參數(shù)列表中.
int
fprintf(FILE
*fp,
char
*format,
輸出列表)
fprintf將格式化數(shù)據(jù)寫入流式文件中.
數(shù)據(jù)塊讀寫函數(shù)
fread
(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
參數(shù)說明:
buffer:是一個指針。
對fread
來說,它是讀入數(shù)據(jù)的存放地址。
對fwrite來說,是要輸出數(shù)據(jù)的地址(均指起始地址)。
size:
要讀寫的字節(jié)數(shù)。
count:
要進行讀寫多少個size字節(jié)的數(shù)據(jù)項。
fp:
文件型指針。
C語文程序中必須有main()函數(shù)。
C的設計原則是把函數(shù)作為程序的構(gòu)成模塊。main()函數(shù)稱之為主函數(shù),一個C程序總是從main()函數(shù)開始執(zhí)行的。
一、main()函數(shù)的形式
在最新的 C99 標準中,只有以下兩種定義方式是正確的:
int main( void ) /* 無參數(shù)形式 */
{
...
return 0;
}
int main( int argc, char *argv[] ) /* 帶參數(shù)形式 */
{
...
return 0;
}
int指明了main()函數(shù)的返回類型,函數(shù)名后面的圓括號一般包含傳遞給函數(shù)的信息。void表示沒有給函數(shù)傳遞參數(shù)。關(guān)于帶參數(shù)的形式,我們等會討論。
瀏覽老版本的C代碼,將會發(fā)現(xiàn)程序常常以main()這種形式開始。C90標準允許這種形式,但是C99標準不允許。因此即使你當前的編譯器允許,也不要這么寫。
你還可能看到過另一種形式。
void main()
有些編譯器允許這種形式,但是還沒有任何標準考慮接受它。C++ 之父 Bjarne Stroustrup 在他的主頁上的 FAQ 中明確地表示:void main( ) 的定義從來就不存在于 C++ 或者 C 。所以,編譯器不必接受這種形式,并且很多編譯器也不允許這么寫。
堅持使用標準的意義在于:當你把程序從一個編譯器移到另一個編譯器時,照樣能正常運行。
二、main()函數(shù)的返回值
從前面我們知道m(xù)ain()函數(shù)的返回值類型是int型的,而程序最后的 return 0; 正與之遙相呼應,0就是main()函數(shù)的返回值。那么這個0返回到那里呢?返回給操作系統(tǒng),表示程序正常退出。因為return語句通常寫在程序的最后,不管返回什么值,只要到達這一步,說明程序已經(jīng)運行完畢。而return的作用不僅在于返回一個值,還在于結(jié)束函數(shù)。
現(xiàn)在我們來做一個小試驗來觀察main()函數(shù)的返回值。編寫如下代碼并編譯運行:
//a.c
#include "stdio.h"
int main(void)
{
printf("I love you.");
return 0;
}
將這個文件保存為a.c,編譯運行后會生成一個a.exe文件?,F(xiàn)在打開命令提示符,在命令行里運行剛才編譯好的可執(zhí)行文件,然后輸入 echo %ERRORLEVEL% ,回車,就可以看到程序返回 一個0 。如果把 return 0; 改為 return 99; ,那么很顯然,再次執(zhí)行上述步驟以后你可以看到程序返回99。要是你這樣寫 return 99.99; 那還是返回99,因為99.99被傳給操作系統(tǒng)之前,被強制類型轉(zhuǎn)換成整數(shù)類型了。
現(xiàn)在,我們把a.c改回原來的代碼,然后再編寫另一個程序b.c:
//b.c
#include "stdio.h"
int main(void)
{
printf("I’m too.");
return 0;
}
編譯運行后打開命令提示符,在命令行里輸入ab 回車,這樣你就可以看到《人鬼情未了》里面經(jīng)典的愛情對白:
I love you.
I’m too.
的含義是:如果 前面的程序正常退出,則繼續(xù)執(zhí)行 后面的程序,否則不執(zhí)行。所以,要是把a.c里面的 return 0; 刪除或者改為 return 99; ,那么你只能看到 I love you. 。也就是說,程序b.c就不執(zhí)行了?,F(xiàn)在,大家該明白 return 0; 的作用了吧。
三、main()函數(shù)的參數(shù)
C編譯器允許main()函數(shù)沒有參數(shù),或者有兩個參數(shù)(有些實現(xiàn)允許更多的參數(shù),但這只是對標準的擴展)。這兩個參數(shù),一個是int類型,一個是字符串類型。第一個參數(shù)是命令行中的字符串數(shù)。按照慣例(但不是必須的),這個int參數(shù)被稱為argc(argument count)。大家或許現(xiàn)在才明白這個形參為什么要取這么個奇怪的名字吧,呵呵!至于英文的意思,自己查字典吧。第二個參數(shù)是一個指向字符串的指針數(shù)組。命令行中的每個字符串被存儲到內(nèi)存中,并且分配一個指針指向它。按照慣例,這個指針數(shù)組被稱為argv(argument value)。系統(tǒng)使用空格把各個字符串格開。一般情況下,把程序本身的名字賦值給argv[0],接著,把最后的第一個字符串賦給argv[1],等等。
現(xiàn)在我們來看一個例子:
//c.c
#include "stdio.h"
int main(int argc, char *argv[])
{
int count;
printf("The command line has %d arguments:
", argc - 1);
for(count = 1; count argc; count++)
printf("%d: %s
", count, argv[count]);
return 0;
}
編譯運行,在命令行輸入c I love you 回車,下面是從命令行運行該程序的結(jié)果:
The command line has 3 arguments:
1:I
2:love
3:you
從本例可以看出,程序從命令行中接受到4個字符串(包括程序名),并將它們存放在字符串數(shù)組中,其對應關(guān)系:
argv[0] ------ c(程序名)
argv[1] ------ I
argv[2] ------ love
argv[3] ------ you
至于argc的值,也即是參數(shù)的個數(shù),程序在運行時會自動統(tǒng)計,不必我們操心。
這個例子中,每個字符串都時一個單詞(字母),那既然是字符串,要把一句話當作參數(shù)賦給程序該怎么辦?你可以在命令行里這樣輸入 c "I love you." "I’m too."。程序運行結(jié)果:
The command line has 2 arguments:
1:I love you.
2:I’m too.
其對應關(guān)系:
argv[0] ------ c(程序名)
argv[1] ------ I love you.
argv[2] ------ I’m too.
要注意的是,你在命令行的輸入都將作為字符串形式存儲于內(nèi)存中。也就是說,如果你輸入一個數(shù)字,那么要輸出這個數(shù)字,你應該用%s格式而非%d或者其他。
再來看一個例子:
//d.c
#include "stdio.h"
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[1], "w");
fputs("I love you.", fp);
fclose(fp);
return 0;
}
編譯運行,打開命令行并輸入d love.txt 回車。這樣,打開d.c文件所在的目錄,你會發(fā)現(xiàn)多了一個名為 love.txt 的文件,打開后里面的內(nèi)容正是世界上說的最多的那句話。
當然,你可能會說我不需要使用命令行參數(shù)就可以做到這些。是的,你當然可以。使用命令行參數(shù)的理由或許就是練習命令行用法,以備以后需要編寫基于命令行的程序。還有一個好處是,不需要C環(huán)境就可以運行已經(jīng)編譯好的程序。比如,你把上面那個程序編譯后生成的d.exe發(fā)給你的女朋友,再告訴她怎么運行,這樣,你的女朋友可以用另一種方式體會到你對她的濃情蜜意。
參考:
本文標題:c語言中必須有的函數(shù),c語言必須有函數(shù)嗎
標題網(wǎng)址:http://jinyejixie.com/article46/hsejhg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、網(wǎng)站策劃、用戶體驗、云服務器、做網(wǎng)站、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)