/*因為C語言跟中國功夫一樣很五發八門,不同的版本、編譯器、作業系統、記憶體條都會影響其結果,所以先<br />聲明:我是在1G的32位記憶體條+Windows XP sp3+Turbo C 2.0+全英文目錄下完成的 writed by sageking2*/</p><p>#include<stdio.h><br />void Myprintf() /*printf的'f'表示格式化(format)輸出的意思*/<br />{<br />int i=65; /*用法:printf(格式控制字元串,輸出資料行表)*/<br />float b=123.4567891; /*格式一般形式:%[標誌][輸出最小寬度][.精度][長度]格式字元*/<br />char shuzu[7]="shuaige"; /*有的編譯器會報錯:數組越界*/<br />printf("You can output a string/n");<br />printf("i=%d,%c,%s/n",i,i,shuzu); /*結果是必須要'/n'才能換行*/<br />printf("b=%f,%lf,%5.4lf,%e/n",b,b,b,b);<br />printf(<br />"Hello world/n"<br />);<br />/*printf( //Turbo C 2.0裡還不能這樣用<br />"Hello,/<br />world");*/<br />}<br />void Myputchar() /*只能輸出單個字元*/<br />{<br />int Z=90;<br />char b='B';<br />putchar('A');<br />putchar(Z);<br />putchar(b);<br />putchar(65);<br />putchar('/101'); /*C中有規定:/+數字==八進位的數,101轉化成十進位的數65*/<br />putchar('/n');<br />}<br />void Myputs() /*只能輸出字串,不能輸出數值或進行格式變換*/<br />{<br />char str[14]="see you latter";<br /> puts(""); /*見鬼:這裡怎麼不自動換行*/<br />puts("zidonghuanhang"); /*會自動換行的*/<br />puts(str); /*怎麼後面右跟亂碼啊!*/<br /> /*puts(str[0]);沒報錯,但是亂碼*/<br />/*puts("%s",str);報錯<br />puts("%c",str)*/<br />/*puts(str,str);不能接兩個參數*/<br />}<br />void Mygetchar() /*顯示的接受單個字元*/<br />{<br />int i;<br />char c;<br /> i=getchar();<br />c=getchar();<br />putchar(i); /*如果輸入的是:1然後敲空格,那麼i=1;c=ASCII(Enter鍵)*/<br />putchar(c);<br />putchar(getchar()); /*直接作為參數,把讀取的東西輸出*/<br />printf("%c",getchar());<br />/*getchar()有一個int型的傳回值。當程式調用getchar()時,程式就等著使用者按鍵,使用者輸入的字元被存在鍵盤緩衝區中,<br /> 直到使用者按斷行符號鍵為止(斷行符號字元也放在緩衝區中)。getchar()函數的傳回值是使用者輸入的第一個字串的ASCII碼,如果<br />出錯返回-1,且將使用者輸入的字元回顯到螢幕。如使用者在按斷行符號之前輸入不止一個字元,其它字元會保留在鍵盤緩衝區中,<br />等待後續getchar()函數調用讀取。也就是說,後續的getchar()調用不會等待使用者按鍵,而直接讀取緩衝區中的字元,直到<br />緩衝區中的字元讀完後,才等使用者按鍵。此外,getchar()還可能讀取scanf()遺留在緩衝區的"Enter按鍵",所以使用getchar()<br />前最好用fflush(stdin);清空輸入緩衝區,若在GCC下只能while(getchar()!="/n") getchar();來消耗式清空輸入緩衝區<br />*/</p><p>}<br />void Mygetch()<br />{<br /> int i;<br />char c;<br /> i=getch();<br />c=getch();<br />putchar(i); /*如果輸入的是:1然後敲空格,那麼i=1;c=ASCII(Enter鍵)*/<br />putchar(c);<br />putchar(getch()); /*直接作為參數,把讀取的東西輸出*/<br />printf("%c",getch());<br />/*getch()沒用到緩衝區,直接從鍵盤擷取索引值,不等待使用者按斷行符號鍵,只要使用者按一個鍵,getch()就立刻返回,getch()傳回值<br />是使用者輸入的ASCII,出錯返回-1。輸入的字元不回顯在螢幕上。*/<br />/*conio.h裡還有個getche()使用直接視頻或BIOS,從鍵盤讀取一個字元,將它 回顯 到當前文字視窗相當於getch()+ECHO*/<br />}<br />void Mygets()<br />{<br />char s[20];<br />gets(s);<br />puts(s);<br />/*不能gets(s1,s2)*/<br />/*gets()和使用"%s"格式的scanf()函數都可以從鍵盤接受字串,但輸入時有區別:對於scanf(),"斷行符號"或"空格"都看成字串<br />結束標記;對於gets(),只有"斷行符號"才作為字串結束標記,"空格"看成字串的一部分。*/<br />}<br />void Myscanf() /*一般形式,scanf(格式控制字元串,地址表列)*/<br />{<br />int a;<br />char b,c[20];<br /> scanf("%d%c",&a,&b); /*格式:%[*][輸入資料的寬度][長度]格式字元*/<br />scanf("%s",&c);<br /> /*scanf("%s",c);這樣也行,函數名、數組名做參數時,加不加&,得到的是相同的地址;c這個數組名在這退化成指向它首地址的指標了*/<br />printf("%d,%c,%s/n",a,b,c);</p><p>/*scanf("%8.2lf",&a);不能企圖用它來控制精度*/<br />/*scanf("%d %*d %d",&a,&b);當輸入1 2 3時,把1賦給a,2跳過,3賦給b*/<br />/*scanf("%5d",&a);當輸入12345678時,只是截取12345賦給a*/<br />/*scanf("%4d%4d",&a,&b);當輸入12345678時,a=1234,b=5678*/<br />/*scanf("%c%c%c",&a,&b,&c);輸入:d e f時,a=d,b=' ',c=e*/<br />/*scanf("a=%d,b=%d c=%d");此時使用者也要輸入a=?,b=? c=?這種模式*/<br />/*在輸入多個數值資料時,若格式控制串中沒有非格式字元做輸入資料之間的間隔,則可用空格、[Tab]<br />或斷行符號做間隔。C編譯在碰到空格、斷行符號或非法資料時即認為該資料結束*/<br />}<br />int main()<br />{<br />Myprintf();<br />Myputchar();<br />Myputs();</p><p> Mygetchar(); /*輸入比輸出更頭疼*/<br /> Mygetch();<br />Mygets();<br /> Myscanf();<br />getch();<br />return 0;<br />}<br />/*見鬼getch的存在會影響printf("i=%d,%c,%s/n",i,i,shuzu);裡面最後的字串,會增加額外的亂碼。<br />害得我每次我用getch()的時候都很小心的看有沒副作用,高手路過請幫我解釋下*/