c - C中的输出发生了奇怪的事情
问题描述
所以问题是我必须在两个字符之间打印一个值(十进制、八进制、十六进制)。
代码是:
#include <stdio.h>
int main (void) {
char a, b;
int z, temp;
printf("Enter first character: ");
scanf("%s", &a);
printf("Enter second character: ");
scanf("%s", &b);
if (a>b){
temp = a;
a = b;
b = temp;
}
printf("ASCII code difference: %d", b-a);
for (int i = a; i <=b; i++){
printf("\n%c %d %o %X", i, i, i, i);
}
return 0;
}
和输出:
Enter first character: a
Enter second character: z
ASCII code difference: 122
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
........
y 121 171 79
z 122 172 7A
但它应该是:
Enter first character: a
Enter second character: z
ASCII code difference: 122
a 97 141 61
b 98 142 62
c 99 143 63
........
y 121 171 79
z 122 172 7A
我能用它做些什么吗?我在 debian wsl2 中使用 gcc 编译它。提前致谢!
解决方案
问题是您使用%s
的是用于读取字符串而不是%c
(从流中读取单个字符)。因此,您需要使用%c
它从流中读取单个字符,但它会在流中留下一个换行符,因此您需要使用 %c
它忽略最后一个输入中留在流中的任何前导空白字符。
#include <stdio.h>
int main (void) {
char a, b;
printf("Enter first character: ");
scanf("%c", &a);
printf("Enter second character: ");
scanf(" %c", &b);
if (a > b) {
char temp = a;
a = b;
b = temp;
}
printf("ASCII code difference: %d", b - a);
for (int i = a; i <= b; i++)
printf("\n%c %d %o %X", i, i, i, i);
return 0;
}
推荐阅读
- c# - 上传 CSV/Excel 文件时如何防止 CSV 注入
- ios - 使用 Swift 跟踪字符串中的特定数据
- angular - Angular Service Worker 处于 SAFE_MODE
- spring-boot - 错误:无法找到或加载主类 com.spring.solarlog.netflixeurekanamingserver.NetflixEurekaNamingServerApplication
- youtube - 使用访问令牌的 Youtube-api 非常小的配额
- ms-word - 如何将 VB6 表单停靠在 MS Word 任务窗格上?
- reactjs - React Routes v4 的行为因索引而异
- php - 在所有页面上显示文本
- javascript - 如何用截止日期显示结束日期 31-03
- c# - 无法让 Autofac 使用 Web API 2