通過Ascii碼識別密鑰。
輸入通過getch函數獲得的數字。
由於控制臺上不顯示getch,所以自定義函數實現了echo。
代碼實現了錄入和刪除功能。
輸入只認數字,按其他字符沒用。
退格鍵壹次刪除壹個字符,可以跨行刪除。
回車確認輸入壹個數字,下次輸入新數字時會自動換行(輸入後光標不會換行,刪除當前行可以回到上壹行)。
Ctrl+D結束程序。
註意:getch函數在windows系統下是正常的。它可能無法在linux系統下運行。
另外,我沒有寫數值大小驗證。數組變量的類型是int。如果輸入超過數值類型的上限,仍然會得到錯誤。如果要輸入更大的數字,可以更改longlong屬性。如果要添加驗證,可以自己添加到代碼中,也可以添加到輸入接收位。
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltconio.h & gt
#定義MAXS 100//數組大小
void showList(int *nums,int n,int flag);//打印數組
int inputNums(int *nums,int maxSize);//在maxSize內輸入數字並保存在maxSize中,返回輸入的數字個數。
void px(int *nums,int n);//按升序排序
int main()
{
int nums[MAXS],n=MAXS,cnt
cnt=inputNums(nums,n);
px(nums,CNT);
printf(" \ n升序排列的數字是:\ n ");
showList(nums,cnt,1);
返回0;
}
Int input nums (int * nums,int maxSize)//在maxSize內輸入壹個數字並保存在maxSize中,返回輸入數字的個數。
{
int i=1,cnt=0,n=MAXS,flag = 0;//flag:要保存的標誌;1:表示有數據要保存2:沒有數據要保存。
char c = 0;
while(我& lt=n)
{
c = getch();
如果(c!=13。& ampc!= 4 & amp& ampc & gt= ' 0 ' & amp& ampc & lt='9')// Input只接收和回顯數字字符。
{
如果(!旗幟)
nums[cnt]=0,cnt++,flag = 1;
nums[CNT-1]= nums[CNT-1]* 10+c-' 0 ';
}
if(c = = 8 & amp;& ampcnt & gt0)//退格刪除
{
if(nums[cnt-1]/10 >0)//如果當前輸入的數字大於1位,則刪除壹位。
nums[CNT-1]= nums[CNT-1]/10;
else If(nums[I-1]/10 = = 0)//如果當前輸入的數字只剩下1位,則當前輸入的數字將被刪除,數組數為-1。
{
nums[cnt-1]=0,CNT-;
如果(計數==0)
flag = 0;
其他
i -,flag = 1;
}
}
If(c==13)//輸入
i++,flag = 0;
if((c & gt;= ' 0 ' & amp& ampc & lt='9')||c==13||c==8)
system("cls "),showList(nums,cnt,0);
if(c==4)//ctrl+D
{
if(標誌)
flag = 0;
打破;
}
}
printf(" \ n輸入的數字是:\ n ");
showList(nums,cnt,1);
返回cnt
}
Void px(int *nums,int n)//按升序排列。
{
int i,j,num
for(I = 0;我& ltn;i++)
for(j = I+1;j & ltn;j++)
{
if(nums[I]& gt;nums[j])
{
num = nums[I];
nums[I]= nums[j];
nums[j]= num;
}
}
}
Void show list (int * nums,int n,int flag)//打印數組,flag:1打印模式;標誌:0顯示模式
{
int I;
如果(標誌& amp& ampn & gt0)
{
printf(" \ n ");
for(I = 0;我& ltn;i++)
printf("%d ",nums[I]);
printf(" \ n ");
}
else if(!旗幟& amp& ampn & gt0)
{
for(I = 0;我& ltn-1;i++)
printf("%d\n ",nums[I]);
printf("%d ",nums[I]);
}
}