关于#c语言#的知识点:C语言中关于%c与%s的区别

img

img


#include 
void ran(char cha[],int k)
{
    int a,b,ran;
    a=cha[0];
    b=cha[1];
    ran=(a-97)*26+(b-96);
    if(b>a)
    ran=ran-(a-96);
    else
    ran=ran-(a-97);
    printf("%d\n",ran);
}
int main()
{
    int T,i,j;
    char cha[2];
    scanf("%d\n",&T);
    for(i=1;i<=T;i++)
    {
        for(j=0;j<=1;j++)
            scanf("%c",&cha[j]);
        ran(cha,2);
    }
    return 0;
}

主函数中输入语句的%c换成%s,后面换成char就是Ac,为什么?

char cha[2];
当你用%s输入2个字符的时候,它实际上越界了,会在后面写入'\0'
而%c没有这个问题

%c接收1个字符
%s接收一个字符串,参数需要数组,数组大小还要考虑末尾的'\0'

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7637795
  • 这篇博客你也可以参考下:【C语言】帮你解决c语言中数组的问题
  • 除此之外, 这篇博客: 冒泡排序算法(起泡排序)及其C语言实现中的 完整代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include <stdio.h>
    //交换 a 和 b 的位置的函数
    void swap(int *a, int *b);
    int main()
    {
     int array[8] = {49,38,65,97,76,13,27,49};
     int i, j;
     int key;
     //有多少记录,就需要多少次冒泡,当比较过程,所有记录都按照升序排列时,排序结束
     for (i = 0; i < 8; i++){
     key=0;//每次开始冒泡前,初始化 key 值为 0
     //每次起泡从下标为 0 开始,到 8-i 结束
     for (j = 0; j+1<8-i; j++){
     if (array[j] > array[j+1]){
     key=1;
     swap(&array[j], &array[j+1]);
     }
     }
     //如果 key 值为 0,表明表中记录排序完成
     if (key==0) {
     break;
     }
     }
     for (i = 0; i < 8; i++){
     printf("%d ", array[i]);
     }
     return 0;
    }
    void swap(int *a, int *b){
     int temp;
     temp = *a;
     *a = *b;
     *b = temp;
    }
    

    运行结果为:

    13 27 38 49 49 65 76 97


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^