考慮到main函數(shù)的特殊性,lz不明白這個(gè)問題可以理解。
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、高郵ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的高郵網(wǎng)站制作公司
main()是省略了返回值類型,C語(yǔ)言會(huì)默認(rèn)認(rèn)為成main的類型為int,在main()的函數(shù)體內(nèi)要返回一個(gè)值,如return 0;
而void main()的返回值是void類型,也就是說沒有返回值。這樣在main()的函數(shù)體內(nèi)你就不用寫return 0;或者return 1;之類的返回語(yǔ)句。
在一個(gè)程序中,可以說你看不出兩者的差別,因?yàn)閙ain()是C語(yǔ)言的入口點(diǎn),入口點(diǎn)如果返回了程序也就結(jié)束了,因此C語(yǔ)言的這個(gè)特性似乎沒用??蓻]用的話,C語(yǔ)言的設(shè)計(jì)者為什么要這么做呢?!肯定有用。
沒錯(cuò),前面我說的是在一個(gè)程序中,它似乎沒用??扇绻粋€(gè)程序prog2調(diào)用另一個(gè)程序prog1的話(這里指的是prog2直接調(diào)用prog1編譯好的可執(zhí)行文件),那么這個(gè)特性就有用了。因?yàn)閜rog2要知道prog1運(yùn)行之后的狀態(tài)。比如你用C寫了一個(gè)刪除文件的程序(暫且命名為delf),然后用另一個(gè)程序去調(diào)用delf,那么調(diào)用結(jié)果怎么樣啊?這個(gè)文件是否刪掉了?這是int main()就會(huì)派上用場(chǎng)了。C語(yǔ)言中默認(rèn)的main如果返回為0,那么這個(gè)程序調(diào)用就成功了,其他值,則為不同的錯(cuò)誤代碼。在你的delf程序中,如果那個(gè)文件刪除成功,那么就在int main()中返回0,其他調(diào)用delf的程序就知道,噢,這個(gè)操作成功了。
在unix/linux系統(tǒng)中的很多命令都是通過這種方式獲得運(yùn)行結(jié)果的。
關(guān)于譚浩強(qiáng)的書,我想不用多說,發(fā)行量說明了一切。畢竟第二版在編寫的時(shí)候還比較早,而第三版根據(jù)很多現(xiàn)在的需要進(jìn)行了改寫,內(nèi)容當(dāng)然會(huì)好些。鑒于lz是初學(xué)C,其實(shí)大可不必在這個(gè)問題上浪費(fèi)太多時(shí)間,當(dāng)你有了更多的項(xiàng)目經(jīng)驗(yàn),對(duì)這個(gè)問題會(huì)有更深刻的理解。
上面我已經(jīng)給出了main()、int main()和void main()的區(qū)別,但建議lz忽略這個(gè)差別,認(rèn)為成二者一樣,先把C的其他部分學(xué)好。至于只寫成main(),我并不推薦,就算編譯器通過了,這種編程的風(fēng)格也太不嚴(yán)謹(jǐn),不利于好的習(xí)慣的養(yǎng)成。
不是有多難的內(nèi)容,只是凡是要多靠自己才行。寫成這個(gè)樣子了,最后一個(gè)菜單自己弄吧。
void getScore(int a[],int n){ int i; for( i = 0; i n ; i++ ) { scanf("%d",a[i]); }}
void sort(int a[],int n){ int temp; temp=a[0]; int i, j; for( i=0; i n - 1; i++) { for( j = i +1; j n; j++) { if( a[i] a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } }}
void sort(int a[],int n, char style){ int temp; temp=a[0]; int i, j; for( i=0; i n - 1; i++) { for( j = i +1; j n; j++) { if( style == 'd' ) { if( a[i] a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } else if( style == 'a' ) { if( a[i] = a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } }}int foundScore(int a[],int n,int score){ int i ,ret_val; ret_val=-1; for( i = 0; i n; i ++ ) { if( a[i] == score) { ret_val= i; break; } } return ret_val;}
void insertScore(int a[],int size,int *n,int score){ /*這種方法對(duì)于以數(shù)組為參數(shù)的函數(shù)中無法計(jì)算出數(shù)組長(zhǎng)度,具體為什么查一下基礎(chǔ)知識(shí)就知道了,在內(nèi)部是不能判斷數(shù)組長(zhǎng)度的,此函數(shù)應(yīng)該更改一下參數(shù)列表*/ // int size=sizeof(a)/sizeof(int); if( n = size ) return; a[++n]=score;}
void deleteScore(int a[],int *n,int score){ for(i = 0; i = n a[i] != score; i++ ); if( a[i] == score; /*移動(dòng)后續(xù)數(shù)據(jù)*/ for( ; i n; i++) { a[i]=a[i+1]; } n--;}
/*輸出數(shù)組中所有成績(jī)。*/void displayScore(int a[],int n){ int i ; for( i = 0; i n; i++ ) { printf("a[%d] = %d\n", i, a[i] ); }}
給你舉個(gè)完整的例子吧 上面的指針之類的應(yīng)該還沒學(xué)到吧~
# include"stdio.h"
# include"string.h"/*因?yàn)橐昧撕瘮?shù)strlen()*/
void string_change(char str[])
{
char c;
int i,j;
for(i=0,j=strlen(str)-1;;i++,j--)/*strlen(str)這是取該字符組的長(zhǎng)度*/
{
if(ij)
{c=str[i];str[i]=str[j];str[j]=c;}/*中心對(duì)稱互換*/
if(ij)break; /*結(jié)束循環(huán)*/
}
}
void main()
{
char str[100];/*里面的100自己取的注意輸入不要超過就行*/
printf("請(qǐng)輸入字符組:\n");
gets(str);
string_change(str); /*引用函數(shù)進(jìn)行對(duì)換*/
puts(str);/*輸出對(duì)換后的字符組*/
}