我正在编写一个C函数来改变字母之间的大小写:将大写字母改为小写字母,将小写字母改为大写字母。代码编译没有错误,但不打印任何内容。为什么呢?
#include<stdio.h>
#include<String.h>
void NOMB_car_chif(char a[])
{
int i;
for(i=0; i<strlen(a); i++){
if(a[i]>=65 && a[i]<=90)
a[i]=a[i]+32;
else
a[i]=a[i]-32;
printf("%s" ,a);
}
}
void main()
{
NOMB_car_chif("Welcome To My Word");
}
答案 0 :(得分:1)
电话
NOMB_car_chif("Welcome To My Word");
将字符串文字作为参数传递,如果尝试修改,则会导致undefined behavior。您需要将指针传递给可修改的内存位置,例如,数组。
也就是说,转换操作是错误的。 else
部分适用于所有
大写字母表的ASCII代码之外的值不是您想要的。您需要检查小写字母的范围,然后执行减法以转换为大写。
最后,提出了几点建议:
65
和90
等幻数,请使用相应的字符常量,例如'a'
,'z'
等。main()
的符合签名至少为int main(void)
。答案 1 :(得分:0)
#include<stdio.h>
#include<string.h>
void NOMB_car_chif(char a[1000])
{
int i=0,b=0;
for(i =0;i<strlen(a);i++)
{
if(a[i]>=65 && a[i]<=90)
b=a[i]+32;
else if(a[i]>=97&&a[i]<=122)
b=a[i]-32;
else
b=a[i];
printf("%c",b);
}
}
void main()
{
NOMB_car_chif("Welcome To My Word");
}
解决您的问题。 您必须在代码中使用%c代替%s。