我这个结果咋一直循环啊

img

注释里是代码的问题 我输入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

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7540850
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:打峡谷之巅有眼缘 那不如我们自己写个猜数字 C语言
  • 除此之外, 这篇博客: C语言:从最简单的C程序设计到选择结构与循环结构程序设计中的 5.8译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。(非字母字符保持原状不变输入一行字符,要求输出其相应的密码) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 解题思路:问题的关键有两个:
    (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");
    }
    

    编译结果如下:
    在这里插入图片描述

  • 您还可以看一下 尹成老师的C语言系列之 数组与算法实战课程中的 11.数组越界小节, 巩固相关知识点