C+关于用户界面设计

news2025/2/25 17:23:50

1.用户界面

      用户界面(User Interface,UI)是用户与计算机程序、应用程序、设备或系统进行

交互的方式和元素的总称。它是用户与计算机系统之间的桥梁,通过它用户可以输入指

令、查看信息、执行操作等。用户界面的主要目标是使用户与系统之间的交互变得更加

直观、友好、高效和易于理解。

1.1 用户界面可以包括以下种类:

1)触摸界面(Touchscreen Interface):

这种界面使用触摸屏作为输入设备,允许用户通过触摸屏幕上的元素来进行操作。智能手机、平板电脑和自动售货机等设备通常采用这种界面。

 2 语音界面(Voice Interface):

这种界面允许用户使用语音指令来与系统进行交互,如智能助手(例如Siri、Alexa、Google Assistant)和语音识别系统。

3)命令行界面(Command Line Interface,CLI):

这种界面通常是基于文本的,用户通过输入命令和参数来与系统进行交互。它在服务器管理、编程和自动化任务中非常常见,例如,Unix/Linux的终端窗口就是一个CLI的例子。

4)触摸界面(Touchscreen Interface):

这种界面使用触摸屏作为输入设备,允许用户通过触摸屏幕上的元素来进行操作。智能手机、平板电脑和自动售货机等设备通常采用这种界面。
语音界面(Voice Interface):
这种界面允许用户使用语音指令来与系统进行交互,如智能助手(例如Siri、Alexa、Google Assistant)和语音识别系统。

5)虚拟现实界面(Virtual Reality Interface):

虚拟现实技术允许用户通过头戴式显示器和手持控制器来与虚拟环境进行互动。

用户界面的设计考虑到用户体验(User Experience,UX),包括界面的可用性、易用性、一致性和美观性。好的用户界面设计可以提高用户的效率和满意度,而不良的设计可能导致用户困惑和不满。因此,用户界面设计是软件和硬件开发过程中的重要组成部分。

 用户界面是我们的程序和外界(用户)的信息交换,用户通过“输入”模块将表示信息的数据存入计算机内(主要是内存),用户通过”输出“模块将内存中信息展示在输出设备上。

2.输入

2.1 一个简单的A+B问题。

2.1.1 正统的编程和运行

先看个A+B的例子。这个问题在很多OJ系统都是1000题(系统的第一个题目)。

A+B问题的正统代码
#include <stdio.h>
int main()
{
	int a , b;
	scanf("%d%d", &a, &b);
	printf("%d\n", a + b); 
 	return 0;
}

 2.1.2 输入不正确的程序设计

看看如下程序的运行

一次测试
再次测试

你可以自己试试。

#include <stdio.h>
int main()
{
	int a , b;
	scanf("%d,%d", &a, &b);
	printf("%d\n", a + b); 
 	return 0;
}

修改代码,看看输入情况。(一般程序运行有错,很多同学都是检查数据处理部分的错误,但是本程序因为数据少,操作及其简单,结果验证容易我们知道有错了,而且可能是输入错误),在输出处理和输出前检查数据(也可以调试跟踪变量)。

可见变量b是1。如果调试可以发现b就是1.。

       这个错误是当你编程中输入格式串中有一般字符。输入却没有原样输入,可是程序仍然继续执行,而b并没有存入而是保持初始值。虽然一般认为GCC是0或随机。但是这次不是0也不是随机是固定的1。(详细分析见另外的文章)。

目前我的建议是变量一定要初始化,输入格式串不要加一般字符。但是这也不是说输入格式串就不能写一般字符。有时候还很有意义。看一个示例

2.2 输入格式串的用途

2.2.1 问题1 ABC

You will be given three integers A, B and C. The numbers will not be given in that exact order, but we do know that A is less than B and B less than C. In order to make for a more pleasant viewing, we want to rearrange them in the given order.

INPUT

The first line contains three positive integers A, B and C, not necessarily in that order. All three numbers will be less than or equal to 100. The second line contains three uppercase letters 'A', 'B' and 'C' (with no spaces between them) representing the desired order.

OUTPUT

Output the A, B and C in the desired order on a single line, separated by single spaces.

SAMPLE INOUT

1 5 3

ABC

SAMPLE OUTPUT

1 3 5

(1)没有能够正确输入的代码
#include <stdio.h>
int main(){
  char a,b,c;
  int x,y,z;
  int max,min,mid;

  scanf("%d%d%d\n",&x,&y,&z);
  scanf("%c%c%c",&a,&b,&c);
//后面的处理代码,略。

 调试可见A没有输入。

a中是0x0a;这个0a是上一行输入的回车\n(回车换行0d 0a 的后一个字节 0a)。可见错误原因是数据行和字符行之间有个换行。需要跳过这个换行。 

(2)简单修改后AC的代码

  修改代码如下(只学到分支阶段的示例程序,后面处理输出的代码有点暴力) 

#include <stdio.h>
int main(){
  char a,b,c;
  int x,y,z;
  int max,min,mid;

  scanf("%d%d%d\n",&x,&y,&z);
  scanf("%c%c%c",&a,&b,&c);
  max = x>y?x:y;  max = z>max?z:max;
  min = x>y?y:x;  min = z<min?z:min;
  mid = (x+y+z) - max - min;
  if(a=='A') printf("%d ",min);
  if(a=='B') printf("%d ",mid);
  if(a=='C') printf("%d ",max);
  
  if(b=='A') printf("%d ",min);
  if(b=='B') printf("%d ",mid);
  if(b=='C') printf("%d ",max);
  
  if(c=='A') printf("%d ",min);
  if(c=='B') printf("%d ",mid);
  if(c=='C') printf("%d ",max);
  return 0;
}

只是在格式串中增加一个\n,问题接近解决。

2.2.2 问题2 分数A+B问题

计算 a/b+c/d问题。

输入示例    1/2+3/4   输出 (保留2位小数)

这个程序正常情况(输入严格按照该要求时),没有问题。但是输入错误则无法计算出正确结果。输出数据不对。

没有结果: 调试可见从c,d没有输入。

 所以在输入后必须校验数据是否输入,是否正确。如果输入不正确需要重新输入。

2.3 scanf和键盘缓冲区概念

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。输入函数

1.原型

int scanf(const char * restrict format,...);

函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

函数 scanf() 是从标准输入流stdin (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

2.返回值:

scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。

2.4

{
    int a,b;
    while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);
    return 0;
}

结合scanf()的返回值与按位取反知识。
当scanf成功读取至少一个数时,scanf的返回值是1或2,1按位取反为-2,2按位取反为-3,都会进入while循环内部。
当输入读取结束后,scanf的返回值是EOF,EOF即-1,-1按位取反为0,此时会跳出while循环。

综上所述。
while(~scanf("%d%d",&a,&b))与while(scanf("%d%d",&a,&b) != EOF)等价。
————————————————
原文链接:https://blog.csdn.net/mahoon411/article/details/123498968

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1394769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++基础3

一 、构造函数的初始化列表 可以指定成员对象的初始化方式 构造函数的初始化列表是在 C 中用于初始化成员变量的一种机制。它在构造函数的参数列表之后&#xff0c;构造函数的函数体之前使用&#xff0c;并使用冒号 : 分隔。初始化列表可以用于给成员变量赋初值&#xff0c;而不…

【MyBatis-Plus】逻辑删除

对于一些比较重要的数据&#xff0c;我们通常采用逻辑删除。&#xff08;即用一个字段表示是否删除&#xff0c;实际上始终在数据库没有被删除&#xff09; 当逻辑删除字段为 true&#xff0c;业务处理的时候会自动把该数据当做一个“不存在”的数据处理。&#xff08;即不处理…

QT quick基础:组件gridview

组件gridview与android中gridview布局效果相同。 一、下面记录qt quick该组件的使用方法。 方法一&#xff1a; // ContactModel.qml import QtQuick 2.0ListModel {ListElement {name: "1"portrait: "icons/ic_find.png"}ListElement {name: "2&quo…

mac下配置git自定义快捷命令

1. 指定自定义别名 vi ~/.bash_profile open ~/.bash_profile 配置环境变量,插入类似下面的内容 .bash_profile文件 alias gcgit checkout alias gmgit commit -m alias gcbgit checkout -balias gtgit statusalias gagit add .alias glggit logalias gdgit diffalias gr…

index_jsp报错

今天跟着视频一模一样敲代码&#xff0c;一直报500 搜索了好几篇csdn&#xff0c;不断地修改添加的jstl.jar 和standard.jar&#xff0c;修改这两个jar包版本&#xff0c;还是报500 又看到说是因为tomcat10中存在jsp.jar&#xff0c;同时存在发生冲突&#xff0c;于是把tomcat…

KNN算法原理及应用

理解KNN 算法原理 KNN是监督学习分类算法&#xff0c;主要解决现实生活中分类问题。 根据目标的不同将监督学习任务分为了分类学习及回归预测问题。 监督学习任务的基本流程和架构&#xff1a; &#xff08;1&#xff09;首先准备数据&#xff0c;可以是视频、音频、文本、…

大模型关键技术:上下文学习、思维链、RLHF、参数微调、并行训练、旋转位置编码、模型加速、大模型注意力机制优化、永久记忆、LangChain、知识图谱、多模态

大模型关键技术 大模型综述上下文学习思维链 CoT奖励建模参数微调并行训练模型加速永久记忆&#xff1a;大模型遗忘LangChain知识图谱多模态大模型系统优化AI 绘图幻觉问题从 GPT1 - GPT4 拆解GPTs 对比主流大模型技术点旋转位置编码层归一化激活函数注意力机制优化 大模型综述…

天锐绿盾有哪些功能?

天锐绿盾是一款企业内网安全管理软件&#xff0c;具有多种功能来保护企业的信息安全。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是天锐绿盾的主要功能&#xff1a; 文件加密保护&#xff1a;天锐绿盾可以对文件…

C# 线程间操作无效: 从不是创建控件的线程访问它--多线程操作

我们在用线程操作的时候&#xff0c;可能会出现异常&#xff1a;线程间操作无效: 从不是创建控件richTextBox1的线程访问它。因为windows窗体控件不是线程安全的&#xff0c;如果几个线程操作某一控件的状态&#xff0c;可能会使该控件的状态不一致&#xff0c;出现争用或死锁状…

黑马 Javaweb - MySQL 精华篇

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

华为交换机配置NQA DNS检测IP网络DNS解析速度

华为HCIA视频教程&#xff1a;超级实用&#xff0c;华为VRP系统文件详解 华为HCIA视频教程&#xff1a;不会传输层协议&#xff0c;HCIA都考不过 华为HCIA视频教程&#xff1a;网络工程师的基本功&#xff1a;网络地址转换NAT 华为HCIP视频教程&#xff1a;DHCP协议原理与配…

Hadoop集群配置及测试

Hadoop集群配置及测试 NameNode与SecondaryNameNode最好不在同一服务器 ResourceManager较为消耗资源&#xff0c;因而和NameNode与SecondaryNameNode最好不在同一服务器。 配置文件 hadoop102hadoop103hadoop104HDFSNameNodeDataNodeDataNodeSecondaryNameNodeDataNodeYAR…

如何通过IDEA创建基于Java8的Spring Boot项目

上次发现我的IDEA创建Spring Boot项目时只支持11和17的JDK版本&#xff0c;于是就通过Maven搭建SpringBoot项目。 究其原因&#xff0c;原来是Spring官方抛弃了Java8&#xff01;&#xff01;&#xff01; 使用IDEA内置的Spring Initializr创建SpringBoot项目时&#xff0c;已…

设计模式——1_5 享元(Flyweight)

今人不见古时月&#xff0c;今月曾经照古人 ——李白 文章目录 定义图纸一个例子&#xff1a;可以复用的样式表绘制表格降本增效&#xff1f;第一步&#xff0c;先分析 变化和不变的地方第二步&#xff0c;把变化和不变的地方拆开来第三步&#xff1a;有没有办法共享这些内容完…

【数据结构】堆的实现和排序

目录 1、堆的概念和结构 1.1、堆的概念 1.2、堆的性质 1.3、堆的逻辑结构和存储结构 2、堆的实现 2.1、堆的初始化和初始化 2.2、堆的插入和向上调整算法 2.3、堆的删除和向下调整算法 2.4、取堆顶的数据和数据个数 2.5、堆的判空和打印 2.6、测试 3、堆的应用 3.1…

AIGC之视频图片生成工具gen-2

最近无事时研究了一款图片和视频生成工具&#xff0c;先说结论&#xff1a; 1.可以生成视频&#xff0c;生成方式有三种 通过文本的方式生成视频可以通过图片的方式生成视频也可以通过图片文本的方式生成视频 2.可以通过文本描述的方式生成图片 3.生成的视频有瑕疵&#xf…

Eureka整合seata分布式事务

文章目录 前言一、Seata配置1.1、Seata下载1.2、修改conf目录中 flie.conf 文件1.3、修改conf目录中 registry.conf文件1.4、初始化seata数据库 二、微服务整合Seata2.1、父工程项目创建引入依赖 2.2、Eureka集群搭建2.3、搭建账户微服务2.3.1 新建seata-account-service微服务…

React全局状态管理

redux是一个状态管理框架&#xff0c;它可以帮助我们清晰定义state和处理函数&#xff0c;提高可读性&#xff0c;并且redux中的状态是全局共享&#xff0c;规避组件间通过props传递状态等操作。 快速使用 在React应用的根节点&#xff0c;需要借助React的Context机制存放整个…

安卓apk加固后重签名

背景 等保检测&#xff0c;安卓apk使用第三方加固后签名信息会丢失&#xff0c;需要我们重新进行签名 使用jarsigner签名遇到的问题 APP失效无法安装 如何解决签名失效 我们在这里使用Android SDK的apksigner进行签名 mac系统&#xff0c;apksigner 需要设置环境变量 1、…

leedcode刷题day2

题目&#xff1a; 根据这道题我的思路是用python首先将第一个值赋给a&#xff0c;然后将下一个值赋值给b在这里写一个循环计算下一个值是否等于a&#xff0c;不等于就进入数组当等于a的时候输出数组长度&#xff0c;然后比较数组长度输出最长长度对应的元素不过显然这很慢。 然…