#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'
#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