史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   如何將輸入的數字改為顯示***號 (http://forum.slime.com.tw/thread154548.html)

904337 2005-08-02 12:38 PM

如何將輸入的數字改為顯示***號
 
如題,小弟用C寫一個簡單的小程式如下,但不知如何將scanf輸入的部份改為星號顯示在螢幕上
main()
{
int i=0,pass;
for ( ; ; )
{
printf ("Please Input Passwd: ");
scanf("%d", &pass);
if (pass == 1111)
break;
else
printf ("Passwd Error\n");
}
}

cwvdavid 2005-08-02 01:36 PM

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

所以...很遺憾.........

mini 2005-08-02 02:50 PM

給您參考 (還是比較喜歡用 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");
}

cwvdavid 2005-08-02 09:03 PM

原來還有這個方法...(請原諒我的無知...C語言我以前只學了1學期...)

904337 2005-08-03 11:31 AM

阿哩阿多....真是太謝謝你們了~~
想請教一下mini....
while(c1!=13);是做啥判斷用的,數值一定要13嗎?

mini 2005-08-03 02:57 PM

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

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

do{

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

while (!kbhit());
是無窮迴圈,當使用者按下鍵盤才離開

904337 2005-08-04 03:11 PM

引用:

作者: 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......不知是哪邊ㄉ問題

mini 2005-08-04 03:53 PM

請將 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

904337 2005-08-04 04:12 PM

引用:

作者: 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給我上了一課~~

mini 2005-08-05 08:35 AM

其實個人講的也不一定正確(只是一時想不出什麼理由...^^||)
像是
unsigned int 與 getch() 配合的問題
這點就有待商榷
因為 int 與 unsigned int 都是 4byte的資料結構大小
所以有可能因此需多加個 清空 的動作嗎?
好像不用的說...


所有時間均為台北時間。現在的時間是 08:42 AM

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

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1