从键盘输入一个单个字符、显示该字符的ASCI码(十六进制) 回车键退出循环, 终止程序

;从键盘输入一个单个字符、显示该字符的ASCI码(十六进制) 
;回车键退出循环, 终止程序
;分析:每个字符都是由两个16进制数组成的ASCL码,例如E3
;所以我们得到一个字符后,将这个字符除16,我们要的结果应该是【结果】【余数】
;我们要写一个子程序能显示0~F,然后循环调用
code segment 
assume cs:code
show:
push ax 
push dx 

cmp al,0ah
jb number1
letter1:
add al,37h
jmp tail1
number1:
add al,30h
tail1:
mov dl,al 
push ax 
mov ah,02
int 21h
pop ax 
mov al,ah 
cmp al,0ah
jb number2
letter2:
add al,37h
jmp tail2
number2:
add al,30h
tail2:
mov dl,al 
mov ah,02
int 21h

pop dx 
pop ax 
ret
start:
mov bl,16  ;除法需要
mov ah,01h ;输入一个字符
int 21h
cmp al,0DH  ;通过实验可知当输入换行时al为0d
jz endd 
;下面就是处理环节
mov ah,0

div bl     ;al中存放结果,ah中存放余数
;自己写一个show方法,显示我们想要的结果
;ax相当于参数
call show
jmp start 
endd:
mov ah,4ch
int 21h
code ends
end start
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是实现该函数的代: ```c #include <stdio.h> #include <string.h> char *insert(char *string, char c) { int len = strlen(string); char *result = (char *) malloc((len+2) * sizeof(char)); int i, j; for (i = 0, j = 0; i < len; i++) { if (string[i] <= c) { result[j++] = string[i]; } else { result[j++] = c; break; } } if (i == len) { result[j++] = c; } for (; i < len; i++) { result[j++] = string[i]; } result[j] = '\0'; return result; } int main() { char string[50]; char c; printf("请输入已排好序的字符串(少于50个字符):"); scanf("%s", string); printf("请输入要插入的字符:"); scanf(" %c", &c); char *result = insert(string, c); printf("插入后的字符串为:%s\n", result); free(result); return 0; } ``` 函数`insert`首先计算原字符串的长度,然后根据长度分配一个新的字符数组`result`,该数组长度比原数组多1,用于存储插入的字符。接着遍历原字符串,如果当前字符小于等于要插入的字符,就将其复制到`result`中,否则就将要插入的字符复制到`result`中,并跳出循环。如果遍历完原字符串后没有插入字符,就在`result`的末尾插入字符。最后将原字符串中剩余的字符复制到`result`中,然后在末尾添加一个`\0`,表示字符串的结束。 在`main`函数中,先分别从键盘读入已排好序的字符串和要插入的字符,然后调用`insert`函数,将返回的字符串打印到屏幕上。注意,在使用`scanf`读入字符时,需要在前面加一个空格,以消耗掉上一个输入的回车符,否则会导致`scanf`读取失败。最后,记得释放`insert`函数中动态分配的内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little BigUs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值