全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2664
推到 Plurk!
推到 Facebook!

用gcc 寫一有turbo c之getch()功能的程式

尚未結案
seebely
一般會員


發表:1
回覆:1
積分:0
註冊:2005-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-23 10:58:31 IP:220.137.xxx.xxx 未訂閱
大家好,我是K Top的新人,請大家多多指教! 想請問板上的程式高手,最近我們老師要我們寫一使用serial port在兩台linx pc互傳資料的程式- serial port的部分還好,但是老師要我們寫一鄧入使用者名稱和密碼畫面-而且密碼不能顯在螢幕上~ 小弟第一個想到的就是使用getch  (位於 gcc 的curses.h ,編譯時要加 -lcurses), 但程式執行到一半就會出現 "segmetaion fault" 的字樣, 不知道是不是getch用法用錯了~ 請問有沒有人可以指導一下小弟, 在gcc 上如何使用getch ,還是有沒有替代方法隱藏密碼?    附上部分程式碼如下: (編譯可過,SERIAL PORT 的部分也已經認證過,沒有問題)
 
while (STOP==FALSE)
        {
                printf("Username:");
                scanf("%s",buf);
                res = write(fd,buf,20);
                buf[res]=0;
                printf("Password:");
                ch=getch();
                while (ch!='\r'){
                        buf[i]=ch;
                        i=i 1;
                        ch=getch();
                }        
                res = write(fd,buf,20);        
                res4 = read(fd,buf3,20);
                buf3[1]=0;
                if ( buf3[0] == 'y' )
                {
                        printf("Login Correct\n");
                        STOP=TRUE;
                }
                else if ( buf3[0] == 'n' )
                        printf("Login Incorrect\n");
                else
                        printf("Server Down\n");
//                printf(":%s:%d\n",buf,res);
//                if (buf[0]=='z') STOP=TRUE;
        }
謝謝各位的閱讀和指教
BY Seebely         
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-23 13:29:40 IP:211.76.xxx.xxx 未訂閱
seebely 您好:    您的程式碼中,buf[i]的i,沒有給定初值,不知有沒有影響? 另外,底下有個讀取密碼的程式,您可參考一下! 程式是在Windows XP下,用 Dev C 編譯(gcc)與執行。 補充說明: 沒想到Linux下沒有getch(),而且要完成這些功能似乎沒有想像的簡單! 底下的連結,希望能幫上您的忙! http://bbs.ee.ntu.edu.tw/boards/Programming/11/5.html UNIX 的確是值得想她致敬!!! < class="code"> #include #include int getPassword(char *passwd, int len) { int k=0; char ch=0; while( k0 ) { printf("\b \b"); --k; } continue; } else putch('*'); passwd[k ] = ch; } if ( ch == '\r' ) --k; // 按下Enter但尚未到達指定密碼長度! passwd[k] = 0; return (k); } int main(int argc, char *argv[]) { int len=4; char passwd[5]; // 密碼最長為 4。 printf("Input your password =>"); len = getPassword(passwd, len); printf("\n%d: %s\n\n", len, passwd); system("PAUSE"); return 0; } RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2005/04/23 15:49:02
seebely
一般會員


發表:1
回覆:1
積分:0
註冊:2005-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-23 14:48:51 IP:220.137.xxx.xxx 未訂閱
嗯.嗯..您的回覆十分清楚!(連刪除字元都有考慮到) 真的很感謝您為我寫的這對程式碼! 不過這程式碼只能在winodows/dos環境下跑,無法用gcc on linux上執行, 因為gcc似乎不支援dev/turbo c的getch函式 (因為gcc雖然有getch,但用起來會出問題), 我猜想gcc的getch與一般我們常用的不同, 只是我怎麼也弄不清楚。 註:原先程式的陣列的初始化的確怪怪的,謝謝您,我已經改善。 然而問題還是依舊。
系統時間:2024-05-14 11:30:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!