史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-08-02, 12:38 PM   #1
904337
註冊會員
榮譽勳章
UID - 5044
在線等級: 級別:7 | 在線時長:81小時 | 升級還需:15小時級別:7 | 在線時長:81小時 | 升級還需:15小時
註冊日期: 2002-12-07
VIP期限: 2008-05
文章: 36
精華: 0
現金: 5530 金幣
資產: 5530 金幣
預設 如何將輸入的數字改為顯示***號

如題,小弟用C寫一個簡單的小程式如下,但不知如何將scanf輸入的部份改為星號顯示在螢幕上
main()
{
int i=0,pass;
for ( ; ; )
{
printf ("Please Input Passwd: ");
scanf("%d", &pass);
if (pass == 1111)
break;
else
printf ("Passwd Error\n");
}
}
904337 目前離線  
送花文章: 1, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2005-08-02, 01:36 PM   #2 (permalink)
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

在DOS下, 是沒辦法的...
因為程式是等你......
... 在DOS的命令列輸入 abcdefg 之後,
才會讀到abcdefg...
(C語言的scanf...是等使用者輸入完文字後, 按下[Enter], 才能取得文字...)
(C語言的scanf...並沒有即時性...不像目前的視窗程式, 或網頁的Script...可以即時偵測)

所以...很遺憾.........
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
舊 2005-08-02, 02:50 PM   #3 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時
註冊日期: 2002-12-07
文章: 13341
精華: 0
現金: 26444 金幣
資產: 3024304 金幣
預設

給您參考 (還是比較喜歡用 basic ^^)

#include <stdio.h>
#include <conio.h>

void main()
{
unsigned int c1, c2;

c2=0;
do {
while (!kbhit());
c1 = getch();
if(c1>=48 && c1<=57){
c1=c1-48;
c2=c2*10+c1;
printf("*");
}
} while(c1!=13);
printf("\nPass word is %d\n",c2);
system("PAUSE");
}
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖
舊 2005-08-02, 09:03 PM   #4 (permalink)
長老會員
 
cwvdavid 的頭像
榮譽勳章
UID - 476
在線等級: 級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時級別:46 | 在線時長:2395小時 | 升級還需:2小時
註冊日期: 2002-12-06
住址: 天與地的夾縫
文章: 3106
精華: 0
現金: 5256 金幣
資產: 2034465 金幣
預設

原來還有這個方法...(請原諒我的無知...C語言我以前只學了1學期...)
cwvdavid 目前離線  
送花文章: 4036, 收花文章: 2466 篇, 收花: 10141 次
回覆時引用此帖
舊 2005-08-03, 11:31 AM   #5 (permalink)
註冊會員
榮譽勳章
UID - 5044
在線等級: 級別:7 | 在線時長:81小時 | 升級還需:15小時級別:7 | 在線時長:81小時 | 升級還需:15小時
註冊日期: 2002-12-07
VIP期限: 2008-05
文章: 36
精華: 0
現金: 5530 金幣
資產: 5530 金幣
預設

阿哩阿多....真是太謝謝你們了~~
想請教一下mini....
while(c1!=13);是做啥判斷用的,數值一定要13嗎?
904337 目前離線  
送花文章: 1, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2005-08-03, 02:57 PM   #6 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時
註冊日期: 2002-12-07
文章: 13341
精華: 0
現金: 26444 金幣
資產: 3024304 金幣
預設

0d 是 Enter 鍵的 KeyCode 值
0d 換算成十進制 = 13

比如您要用 o 當輸入鍵可改成 0x6f = 111

do{

}while(c1!=13);
是讓程式直到按下 [Enter] 才離開 使用者輸入作業區段

while (!kbhit());
是無窮迴圈,當使用者按下鍵盤才離開
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖
舊 2005-08-04, 03:11 PM   #7 (permalink)
註冊會員
榮譽勳章
UID - 5044
在線等級: 級別:7 | 在線時長:81小時 | 升級還需:15小時級別:7 | 在線時長:81小時 | 升級還需:15小時
註冊日期: 2002-12-07
VIP期限: 2008-05
文章: 36
精華: 0
現金: 5530 金幣
資產: 5530 金幣
預設

引用:
作者: mini
給您參考 (還是比較喜歡用 basic ^^)

#include <stdio.h>
#include <conio.h>

void main()
{
unsigned int c1, c2;

c2=0;
do {
while (!kbhit());
c1 = getch();
if(c1>=48 && c1<=57){
c1=c1-48;
c2=c2*10+c1;
printf("*");
}
} while(c1!=13);
printf("\nPass word is %d\n",c2);
system("PAUSE");
}
請問mini當我輸入11111或22222時都顯示正常,但輸入33333時卻顯示-32203,44444顯示
-21092......不知是哪邊ㄉ問題
904337 目前離線  
送花文章: 1, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2005-08-04, 03:53 PM   #8 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時
註冊日期: 2002-12-07
文章: 13341
精華: 0
現金: 26444 金幣
資產: 3024304 金幣
預設

請將 void main
改成 main (也就是去掉 void)
再編譯一次

以下是.c原始檔及.exe
http://www.qfile.de/dl/137403/TestAPP.rar.html
(此空間需在網頁下下載,不適用flashget等工具下載)

有些編譯器只要有一點錯誤就不能成exe使得使用者執行exe檔時其實是舊的 exe導致錯誤
剛剛執行 .exe 時發現的問題(TestAPP.rar 已更正)
密碼的最大值是 unsigned int = 正整數(4Byte) = 0 ~ 4,294,967,295
實際上還要看 使用的C編譯器及作業系統
(個人用Dev-C++編譯就不能到這麼高 1234567890 還可以,到底極限在哪就請您自己研究了)
http://yes.nctu.edu.tw/VC/Ref/BasicDataType.htm

如果還不行
可能是 unsigned int 與 getch() 配合的問題
(因為 getch() 的輸出值是 int)
所以可以試試在 c1 = getch(); 前加個 c1 = 0; 來清空 c1
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖
舊 2005-08-04, 04:12 PM   #9 (permalink)
註冊會員
榮譽勳章
UID - 5044
在線等級: 級別:7 | 在線時長:81小時 | 升級還需:15小時級別:7 | 在線時長:81小時 | 升級還需:15小時
註冊日期: 2002-12-07
VIP期限: 2008-05
文章: 36
精華: 0
現金: 5530 金幣
資產: 5530 金幣
預設

引用:
作者: mini
請將 void main
改成 main (也就是去掉 void)
再編譯一次

以下是.c原始檔及.exe
http://www.qfile.de/dl/137403/TestAPP.rar.html
(此空間需在網頁下下載,不適用flashget等工具下載)

有些編譯器只要有一點錯誤就不能成exe使得使用者執行exe檔時其實是舊的 exe導致錯誤
剛剛執行 .exe 時發現的問題(TestAPP.rar 已更正)
密碼的最大值是 unsigned int = 正整數(4Byte) = 0 ~ 4,294,967,295
實際上還要看 使用的C編譯器及作業系統
(個人用Dev-C++編譯就不能到這麼高 1234567890 還可以,到底極限在哪就請您自己研究了)
http://yes.nctu.edu.tw/VC/Ref/BasicDataType.htm

如果還不行
可能是 unsigned int 與 getch() 配合的問題...
謝謝mini給我上了一課~~
904337 目前離線  
送花文章: 1, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
舊 2005-08-05, 08:35 AM   #10 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時級別:97 | 在線時長:9858小時 | 升級還需:138小時
註冊日期: 2002-12-07
文章: 13341
精華: 0
現金: 26444 金幣
資產: 3024304 金幣
預設

其實個人講的也不一定正確(只是一時想不出什麼理由...^^||)
像是
unsigned int 與 getch() 配合的問題
這點就有待商榷
因為 int 與 unsigned int 都是 4byte的資料結構大小
所以有可能因此需多加個 清空 的動作嗎?
好像不用的說...
mini 目前離線  
送花文章: 2013, 收花文章: 8001 篇, 收花: 26805 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 09:00 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1