注释里是代码的问题 我输入12,一直输出c 无限下去 怎么修改哇 有更优化的大码供🆕人参考不 谢谢
#include <stdio.h>
int main() {
int num;
printf("请输入一个十进制数:");
scanf("%d", &num);
char result[101];
result[100] = '\0';
int count=100; // 记录第一位数的下标
while ( num ) {
int i; // 记录余数
i = num % 16;
if ( i >= 10 ) {
result[--count] = i-10+'A';
}
else {
result[--count] = i+'0';
}
num = num/16; // num为整形,除法只取整数部分。将商重新赋值给num,开启下一轮
}
printf("%s", &result[count]); // 从第一位数的地址开始打印
return 0;
}
inum/16
->
inum/=16
解题思路:问题的关键有两个:
(1) 决定哪些字符不需要改变,哪些字符需要改变,如果需要改变,应改为哪个字符c=getchar();
处理的方法是:输入一个字符给字符变量c,先判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则还要检查它是否’W’到’Z’的范围内(包括大小写字母)。如不在此范围内,则使变量c的值改变为其后第4个字母。如果在’W’到’Z’的范围内,则应将它转换为A~D(或a~d)之一的字母。
(2) 怎样使c改变为所指定的字母?
办法是改变它的ASCII值
例如字符变量c的原值是大写字母’A’,想使c的值改变为’E’,只需执行“c=c+4”即可,因为’A’的ASCII值为65,而’E’ 的ASCII值为69,二者相差4
if(c>='W' && c<='Z' || c>='w' && c<='z')
{
c=c+4-26;
}
else
{
c=c+4;
}
#include<stdio.h>
int main()
{
char c;
c=getchar();
while(c!='\n')
{
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
{
if(c>='W' && c<='Z' || c>='w' && c<='z')
{
c=c-22;
}
else
{
c=c+4;
}
}
printf("%c",c);
c=getchar();
}
printf("\n");
}
编译结果如下:
另一种解法:
#include<stdio.h>
int main()
{
char c;
while((c=getchar())!='\n')
{
if((c>='A' && c<='Z') || (c>='a' && c<='z'))
{
c=c+4;
}
if(c>='Z' && c<='Z'+4 || c>'z')
{
c=c-26;
}
printf("%c",c);
}
printf("\n");
}
编译结果如下: