【更友好的用户交互】从一个小程序谈起
来源:互联网 发布:数控线切割编程3b代码 编辑:程序博客网 时间:2024/05/16 11:47
引例:从输入的m个数中找出最小的n个数
//作者 戚凡 时间2017-5-7
//题目3:查找最小的k个元素(笔试题)
// 输入n个整数,输出其中最小的k个。
// 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4
#include<stdio.h>
#include<stdlib.h>
void smallest(const int *n,int size,int k);
int main()
{
int g = 0;
printf("how many numbers would you wanna input?_____\n"
"and how many smaller numbers would you wanna find?_____\n"
"this program will be in a infinite loop,enter q to quit!\n");
int m,n;
while(g=scanf("%d%d",&m,&n)==2)//这一行使得程序在有两个合法的输入时,不断循环
{
if(m<1||m<n)
printf("wrong input!\n");
else
{
printf("I get it.You wanna find %d smallest numbers in total %d numbers\n",n,m);
int *p=(int *)malloc(sizeof(int)*m);
printf("now you can input %d numbers\n",m);
int i = 0;
for(i = 0; i < m; i++)
scanf("%d",p+i);
// for(i = 0; i <m; i++)//至此 m个数读取正常
// printf("%d ",*(p+i));
char garbage[100];//清空缓冲区,防止用户输入过量
fgets(garbage,100,stdin); //清空缓冲区,防止用户输入过量
smallest(p,m,n);
}
}
return 0;
}
void smallest(const int *n,int size,int k)
{
int i = 0;
int tmp;
int * pt=(int *)malloc(sizeof(int)*size);
for(i = 0; i < size; i++)
{
*(pt+i) =*(n+i);
}
// for(i = 0; i <size; i++)//至此 m个数拷贝正常
// printf("%d ",*(pt+i));
//block start:insertion-sort the array and print the seveal smallest ones
int j;
int key;
for(j = 1; j < size; j++)
{
key = *(pt+j);
i = j - 1;
while(i >= 0 && *(pt+i) > key)
{
*(pt+i+1) = *(pt + i);
i = i - 1;
}
*(pt + i+1) = key;
}
for( i = 0; i < k; i++)
printf("%d ", *(pt+i));
printf("\n");
//block end:insertion-sort the array and print the seveal smallest ones
}
这是最终实现的代码。
1.首先值得注意的时,如果不加循环执行的代码,程序执行一次就退出,不太方便多次使用,也不方便进行测试。
2.如果用户输入参数过多,如何清除缓冲区?
于是可以添加一段代码,再用fgets()读取缓冲区的无效输入:
解决后是这样的
3.不过这个程序依然有个问题。当一开始就读到的是字符(不够两个合法参数),程序直接结束了。这怎么办?
如果读取不到两个合法参数怎么办?一开始读到非数值数据。因此可以再加一段代码
while(g!=1)
scanf("*s"); //处理非整数输入
//这个程序没有实现这一功能
- 【更友好的用户交互】从一个小程序谈起
- 用户交互程序小技巧
- android 如果编写更友好的用户提示
- 与用户进行友好交互的前端的创建
- ionic-下拉刷新的视觉友好交互小tips
- android程序出错了怎么更友好的处理
- 程序猿更友好的使用bootstrap弹出框
- 微信小程序-拒绝授权友好的交互反馈方式
- shell是一个用户与内核的交互程序
- [收藏]利用ReportingServices从应用程序生成用户友好的报表
- 利用ReportingServices从应用程序生成用户友好的报表
- python-简单用户交互小程序
- 我们要友好的告诉用户,程序要崩溃了
- 我们要友好的告诉用户,程序要崩溃了
- 《一个程序员的奋斗史》读后感:从码农谈起
- 我们做App的一定要用这种友好的方式去跟用户交互
- 表单的友好用户体现
- 一个写给Notebook用户的小程序 IpAddressChange
- 12 WebGL移动、旋转和缩放中的平移
- android插件化(AMS Hook)
- Linux strace命令
- 电脑USB口输出的是什么电平
- Github最火开源项目-一分钟学会旋转选择器WheelPicker使用
- 【更友好的用户交互】从一个小程序谈起
- JVM
- 优秀是一种使命
- 通用viewHolder设计,通用Adapter设计,解决简单的listview显示
- win10+uefi+gpt安装一键GHOST之后无法重启的快速解决方法(无需重装系统无需修复引导)
- Vijos P1784 数字统计【进制】
- React Navigation 自认比较好的navigator组件(一)
- 通过定时任务处理数据缓存
- 从Redis中的BGSAVE命令谈起Fork—之二