(已补充排序功能!基本冒泡排序!)
通过Ascii码来识别按键。
输入采用getch函数获取字符再转数字。
由于getch不在控制台显示,自定义函数实现回显。
代码实现了录入,删除功能。
录入只识别数字,其他字符按了也没用。
退格键一次删一个字符,可以跨行删除。
回车确认一个数字的输入,下次输入新数字自动换行(回车后光标不换行,另外删除当前行可以反退到上一行)。
Ctrl+D结束程序。
注意:getch函数在windows系统下正常。linux系统下不一定能运行。
另外,我没有写数值大小验证,数组变量是int型,如果你输入超出数值类型上限还是会报错的,想要输入更大的数字,可以换longlong性。想加验证,自己在代码里加好了,可以加在输入接收的位置。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define 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);
return 0;
}
int inputNums(int *nums,int maxSize)//输入maxSize个以内的数字保存在maxSize中,返回输入的数字个数
{
int i=1,cnt=0,n=MAXS,flag=0;//flag:待保存标识;1:标识有数据待保存2:无数据待保存
char c=0;
while(i<=n)
{
c=getch();
if(c!=13 && c!=4 && c>='0' && c<='9')//输入只接收并回显数字字符
{
if(!flag)
nums[cnt]=0,cnt++,flag=1;
nums[cnt-1]=nums[cnt-1]*10+c-'0';
}
if(c==8 && cnt>0)//退格删除
{
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--;
if(cnt==0)
flag=0;
else
i--,flag=1;
}
}
if(c==13)//回车
i++,flag=0;
if((c>='0' && c<='9')||c==13||c==8)
system("cls"),showList(nums,cnt,0);
if(c==4)//ctrl+D
{
if(flag)
flag=0;
break;
}
}
printf("\n输入的数字为:\n");
showList(nums,cnt,1);
return cnt;
}
void px(int *nums,int n)//升序排列
{
int i,j,num;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(nums[i]>nums[j])
{
num=nums[i];
nums[i]=nums[j];
nums[j]=num;
}
}
}
void showList(int *nums,int n,int flag)//打印数组,flag:1打印模式;flag:0显示模式
{
int i;
if(flag && n>0)
{
printf("\n");
for(i=0;i<n;i++)
printf("%d ",nums[i]);
printf("\n");
}
else if(!flag && n>0)
{
for(i=0;i<n-1;i++)
printf("%d\n",nums[i]);
printf("%d",nums[i]);
}
}
追问写的有点复杂了对我来说,但是真的是太感谢了!
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0,j,k,r;
float array[100], f;
puts("需要排序的数字:");
while (i < 100) {
r = scanf("%f", &array[i]);
if (r == EOF)
break;
if (r == 0) {
puts("输入错误");
while (getchar()!='\n');
continue;
}
++i;
}
for (j=0; j<i-1; ++j) {
for (k=j+1; k<i; ++k) {
if (array[j] > array[k]) {
f = array[j];
array[j] = array[k];
array[k] = f;
}
}
}
puts("升序排好的数字:");
for (j=0; j<i; ++j) {
printf("%g\n", array[j]);
}
}
追问写得很清楚!真的是太感谢了🙏
追答不谢,兄弟,你忘了点采纳了
可以帮忙写一下吗。刚开始学C不是很懂
本回答被网友采纳