Powered By Blogger

關於我自己

我的相片
網站經營斷斷續續,現在以分享程式練習為主。 因為工作需要,不時會有練習程式的需要。 所以將自己練習的過程分享給大家。 如果有幫助到各位,那就太好了! 如果針對本人或網站內容有任何問題, 歡迎與我聯絡。

2015年5月14日 星期四

【C / C++ 語言】按鍵輸入,模擬七段顯示器倒數

嗯亨亨。居裡貓又來了一題,跟上一篇類似的問題。
當然狀況也是一樣,所以依然使用 C / C++ 來模擬作答囉。請看~

「5/15在結果圖後面,更新了利用 switch 的寫法。」
題目狀況大概如下:

利用15個按鍵在s2與s3七段顯示器上顯示1-15的數值。
利用第16個按鍵,將七段顯示氣上的數值倒數至0。

以上就是題目大概的敘述啦。
那當然居裡貓沒有那個設備跟環境,所以就利用 VS C++ 來模擬這個環境。
居裡貓利用電腦鍵盤的數字鍵1-9及a-g模擬題目的16個按鍵。
按鍵說明:
按鍵  顯示/功能
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
a    10
b    11
c    12
d    13
e    14
f     15
g    倒數按鍵
Esc   關閉視窗 「5/15更新功能」

好的,那就下面分享居裡貓的程式碼給大家囉!!!


// keypress test.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"
#include "stdlib.h"
#include "iostream"
#include "conio.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
cout << "模擬按鍵輸入1-15數字於七段顯示器上" << endl;
cout << "並利用按鍵將七段顯示器顯示數值倒數至0" << endl;
cout << "數字鍵1-9,顯示數值1-9" << endl;
cout << "字母鍵a-f,顯示數值10-15" << endl;
cout << "字母鍵g,倒數按鍵" << endl;

int xx=0; //此變數做為按鍵擷取的ASCII碼存放變數
//數字鍵1-9,ASCII碼分別為49-57;字母鍵a-g,ASCII碼分別為97-103
int s0=0,s1=0,s2=0,s3=0; //模擬四個七段顯示器
while(1)
{
//利用getch()函式擷取按鍵狀態。
xx=getch(); //將按下按鍵ASCII碼存入變數
//判斷現在按下的按鍵是否符合限制條件
if(xx == 49)
{
s2=0;s3=0;
s3=s3+1;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 50)
{
s2=0;s3=0;
s3=s3+2;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 51)
{
s2=0;s3=0;
s3=s3+3;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 52)
{
s2=0;s3=0;
s3=s3+4;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 53)
{
s2=0;s3=0;
s3=s3+5;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 54)
{
s2=0;s3=0;
s3=s3+6;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 55)
{
s2=0;s3=0;
s3=s3+7;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 56)
{
s2=0;s3=0;
s3=s3+8;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 57)
{
s2=0;s3=0;
s3=s3+9;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 97)
{
s2=0;s3=0;
s2=s2+1;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 98)
{
s2=0;s3=0;
s2=s2+1; s3=s3+1;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 99)
{
s2=0;s3=0;
s2=s2+1; s3=s3+2;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 100)
{
s2=0;s3=0;
s2=s2+1; s3=s3+3;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 101)
{
s2=0;s3=0;
s2=s2+1; s3=s3+4;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 102)
{
s2=0;s3=0;
s2=s2+1; s3=s3+5;
cout << s0 << s1 << s2 << s3 << endl;
}
else if(xx == 103) //此判斷式為按下g鍵,開始進行倒數工作
{
cout << endl << "開始倒數" << endl;
 //巢狀迴圈開始倒數設定
for(s2=s2;;)
{
for(s3=s3;;)
{
cout << s0 << s1 << s2 << s3 << endl;
if(s3==0)
{//倒數關鍵,檢視s3七段顯示器狀態,是否為0,如為0可能
               //數值為10,因此s2顯示器數值減1,並跳出此迴圈
s2=s2-1;
break;
}
s3=s3-1; //如s3數值並非為0,則s3減1
}
s3=9; //這裡為s2-1之後,將s3數值從0設置為9開始,回到s3迴圈開
               //始減少。
if(s2<0)
{//當所有數值減完,重設四個七段顯示器初始數值
s0=0;s1=0;s2=0;s3=0;
cout << endl;
break;
}
}
}
else if(xx == 27) //按下 Esc 鍵即可關閉視窗
{
exit(0);
}
else //除限制條件以外按鍵皆為非法按鍵
{
cout << "請勿按下其他按鍵" << endl;
s0=0;s1=0;s2=0;s3=0;
}

}
system("pause");
return 0;
}

那接著來看一下結果吧!!!


這裡居裡貓就測試了兩個按鍵,1跟10。
10這裡居裡貓在做的時候發現是一個容易出錯的地方,請大家注意囉~

以上,希望大家會喜歡~!

---------5/15更新---------------------------------------------------------------------------------

// keypress test.cpp : 定義主控台應用程式的進入點。
//

#include "stdafx.h"
#include "stdlib.h"
#include "iostream"
#include "conio.h"
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
cout << "模擬按鍵輸入1-15數字於七段顯示器上" << endl;
cout << "並利用按鍵將七段顯示器顯示數值倒數至0" << endl;
cout << "數字鍵1-9,顯示數值1-9" << endl;
cout << "字母鍵a-f,顯示數值10-15" << endl;
cout << "字母鍵g,倒數按鍵" << endl;

char xx; //此變數做為按鍵擷取的ASCII對應字元碼存放變數
//數字鍵1-9,ASCII碼分別為49-57;字母鍵a-g,ASCII碼分別為97-103
int s0=0,s1=0,s2=0,s3=0; //模擬四個七段顯示器
while(1)
{
//利用getch()函式擷取按鍵狀態。
xx=getch(); //將按下按鍵ASCII碼對應字元存入變數 請參照 www.zh.wikipedia.org/wiki/ASCII
//判斷現在按下的按鍵是否符合限制條件

switch(xx)
{
case'1':
s2=0;s3=0;
s3=s3+1;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'2':
s2=0;s3=0;
s3=s3+2;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'3':
s2=0;s3=0;
s3=s3+3;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'4':
s2=0;s3=0;
s3=s3+4;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'5':
s2=0;s3=0;
s3=s3+5;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'6':
s2=0;s3=0;
s3=s3+6;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'7':
s2=0;s3=0;
s3=s3+7;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'8':
s2=0;s3=0;
s3=s3+8;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'9':
s2=0;s3=0;
s3=s3+9;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'a':
s2=0;s3=0;
s2=s2+1;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'b':
s2=0;s3=0;
s2=s2+1;s3=s3+1;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'c':
s2=0;s3=0;
s2=s2+1;s3=s3+2;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'd':
s2=0;s3=0;
s2=s2+1;s3=s3+3;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'e':
s2=0;s3=0;
s2=s2+1;s3=s3+4;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'f':
s2=0;s3=0;
s2=s2+1;s3=s3+5;
cout << s0 << s1 << s2 << s3 << endl;
break;
case'g':
cout << endl << "開始倒數" << endl;
for(s2=s2;;)
{
for(s3=s3;;)
{
cout << s0 << s1 << s2 << s3 << endl;
if(s3==0)
{//倒數關鍵,檢視s3七段顯示器狀態,是否為0,如為0可能
數值為10,因此s2顯示器數值減1,並跳出此迴圈
s2=s2-1;
break;
}
s3=s3-1; //如s3數值並非為0,則s3減1
}
s3=9; //這裡為s2-1之後,將s3數值從0設置為9開始,回到s3迴圈開始減少。
if(s2<0)
{
s0=0;s1=0;s2=0;s3=0;
cout << endl;
break;
}
}
break;
case' ': //Esc 在 getch()函式底下擷取到的字元為向左箭頭,此處編寫須注意
exit(0);
break;
default:
cout << "請勿按下其他按鍵" << endl;
s0=0;s1=0;s2=0;s3=0;
break;
}
}

system("pause");
return 0;

}

沒有留言:

張貼留言