請問一下喔
在書上看到的她說 連續使用scanf()函數的時候,不能讀取ENTER= =?
她說因為按入ENTER鑑時,這個鍵的資料會被讀取且放入變數內!!(聽不太懂,可不可以用另ㄧ種解釋方式阿= =a)
/*不要讀ENTER*/
char dummy;
scanf(\"%c\", &dummy) ←她說要用這個當替身= =?? 好多問號
還有可不可以跟我說一下C語言所謂的 \"函數 變數 參數 引數\"...還有很多什麼數的,幫我解說一下 因為是個超超超新手^^\" 感恩喇
最後= =a 為什麼我家的電腦,在我要執行寫完的程式的時候,就是可以從一個黑色框框裡面看到成果那邊 黑色框框會一直自己關掉 好奇怪喔
感恩唷!!
2006-07-09 15:13:33 · 3 個解答 · 發問者 振江 1 in 電腦與網際網路 ➔ 程式設計
書上是降子說的喇
在scanf()函數介紹的地方她說
一點要注意的地方,連續使用scanf()函數時,不能讀取Enter鑑。以鍵盤輸入而言,當我們一按下Enter鍵,這個鍵的資料便被讀取且放入變數內。這時輸入裝置則留有另一個待輸入的Enter。因此在執行下列的scanf()之前,須先插入如下的另一個scanf(),讓程式不要讀取Enter鍵。
/*不要讀取Enter*/
char dummy;
scanf("%c", &dummy);
這個是在「C語言演算法徹底入門」這本書裡面的
2006-07-09 20:13:34 · update #1
我在後面加了system("pause");
可是還是ㄧ樣,一執行馬上就會不見= =
因為降所以很麻煩學的很累
還有有時候明明已經照著書上一模一樣的打上去了,可是就是不能執行,好奇怪,好像只有範例可以執行一樣。
對了,我是用Dev-C++軟體
2006-07-09 20:32:19 · update #2
1. scanf
〝應該〞是書的敘述方式不好。
電腦本身絕對是個白痴:「你沒說的事,它絕對不會;它會這樣做,一定有原因!」
所以,Enter本身也是個字元。不然,它不會換行。(註:應該叫換列。)
書本應該是在說:不要以為 Enter 不是個字,它也是!
用 scanf("%c", &something) 時,會一個一個字元(character) 讀進來,包括 enter。
如果我猜錯了,麻煩把書上相關的全文 post 出來。
2. 照您問的問題來看,您應該是初學者。我就簡單回答。
函數 (Function):一種會幫你做事並傳回值東東,哪怕傳回值的東東叫〝沒東東〞(void)。至於是做啥事、傳啥東東,就看程式師怎麼寫啦!如:sin(x) 幫你算 sin ,傳回 sin 的值。
變數 (Variable):一種可以記各類〝值〞的東東。不過,同一類變數只能記一類的東東。如:double pi 可以拿來記 3.1415926535897。
參數 (parameter):傳給程式 / 函數的特殊值,是讓程式 / 函數知道去做不同處理用的。通常會在前面加上 / - -- + 之類的符號。如:
dir /w:要 dir 以一列多檔的方式列出目錄內容。
fdisk /MBR:要 fdisk 只而且直接寫出開機資料(boot record)。
引數 (argument):給程式 / 函數拿去算的數。如:
dir test:列出檔名是 test 的檔案。
printf("It's %c.\n", dummy) 的 dummy 是引數。至於 "It's %c.\n",有人說是參數(改變算法,認定 dummy 是字元(char));也有人說是引數(It's 和 .\n是 printf 拿去算的東東,只有 %c 有改變算法!所以不能算是參數。)
我個人覺得爭這細節是吃飽太撐的學者才會去做的事。我們一般人只要知道沒爭議的東東就好了。
3. 那應該是 VC 在〝DOS〞下執行的現象。在程式最後面加一列
system("pause");
就好了。
祝:學習愉快、成功。
2006-07-10 21:50:23 補充:
在程式設計中,有關函數中參數/引數,較學術性的說法,是被呼叫的函數中的東東稱為 引數。呼叫者傳去的東東叫 參數。
2006-07-10 22:19:06 補充:
我看了您的補充,實在想不懂作者要表達什麼!就他字面而言:〝我們一按下Enter鍵,這個鍵的資料便被讀取且放入變數內。這時輸入裝置則留有另一個待輸入的Enter。〞也是錯的!!!正確的該是:『我們一按下Enter鍵,這個鍵的資料便〝在極短時內〞被讀取且放入〝佇列〞內。〝這時輸入裝置則留有另一個待輸入的Enter。(這句完全不懂他在說啥!應該是說錯了)〞』就大哭呆的範例來看,也看不出為何那本書要說 Enter 會讀不到!
2006-07-10 22:30:16 補充:
那本書我沒見過。大哭呆用的是 Linux 系的作業系統;您用的好像是 Windows系的作業系統;您要不要試試看用2次的 system("pause");〝可能〞是 windows 的作業系統做了啥怪物,是我所不知道的!如果2次system("pause"); 能解決,那書本寫的就是〝對〞的,只不過是寫反了!您先試試,告訴我結果,我再試試看能不能知道您遇到的是什麼問題。不過,C有它的標準!您的問題是在它的範圍內。所以,不應該會隨不同的作業系統而不同!
2006-07-09 19:11:36 · answer #1 · answered by ? 7 · 0⤊ 0⤋
To 大哭呆
你的說明很好, 但我想你的 if else 的內容改一下會更好
像是用 ' ' 取代 32
用 '\n' 取代 10
我想對初學者會更容易理解
2006-07-10 17:44:07 · answer #2 · answered by Rody 5 · 0⤊ 0⤋
#include
#include
int main(void)
{
char c = 0;
while(1){
scanf("%c",&c);
if(c==32)
printf("輸出:空白(%i)\n",c);
else if(c==10)
printf("輸出:換行(%i)\n",c);
else
printf("輸出:%i\n",c);
}
}
結果:
[cosmo@172 test]$ ./a
1 2 3 4 5
輸出:49
輸出:空白(32)
輸出:50
輸出:空白(32)
輸出:51
輸出:空白(32)
輸出:52
輸出:空白(32)
輸出:53
輸出:換行(10)
這樣懂嗎
2006-07-10 13:21:05 · answer #3 · answered by 大 3 · 0⤊ 0⤋