我正在努力学习C来培养我的编程技巧,我正在尝试制作一个算法,可以将大写字母改为小写字母,将小写字母改为大写字母。在简单算法中,我编写了这段代码,但是出错了发生在它上面,我的问题是编译器说“操作数类型是不兼容的”。这是什么意思?我把我的长度称为指针函数,在地址中存储一个内存以输入控制台随机字符。中出现错误我小于循环部分的长度。我期待从你的回复中学到新东西。“int”和“int(*)char * s”)它说 < / p>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
int length(char *s)
{
int i = 0;
int counter = 0;
while (s[i] != NULL)
{
i++;
counter++;
}
return counter;
}
void upperlower(char *s)
{
int i;
for (i = 0; i<length; i++)
{
if (s[i] >= 65 && s[i] <= 90)
s[i] += 32;
else if (s[i] >= 97 && s[i] <= 122)
s[i] -= 32;
}
}
int main()
{
printf("Please write down the character string: ");
scanf("%s", upperlower);
printf("The character string is %s", upperlower);
getch();
return 0;
}
答案 0 :(得分:2)
您似乎对如何调用函数感到困惑。
执行此操作时:
for (i = 0; i<length; i++)
您没有调用length
函数。您正在表达式中使用函数的名称,因此您所拥有的是函数指针。您需要添加函数调用操作数()
以及要传入的参数:
for (i = 0; i<length(s); i++)
同样在main
函数中,您实际上并未调用upperlower
。此外,您永远不会定义字符数组来接收您想要读取的字符串。将该数组包含为局部变量,将其传递给scanf
以从用户获取字符串,然后将其传递给函数。
char str[50];
printf("Please write down the character string: ");
scanf("%49s", str);
upperlower(str);
printf("The character string is %s", str);
答案 1 :(得分:1)
scanf("%s", upperlower);
需要void*
类型(在这种情况下为char*
)并且您提供的函数指针void (*)(char*)
无法转换为void*
因此错误。
如果你正在学习,C语言并不是最简单的语言,特别是从指针开始。考虑内存布局,它将开始变得更有意义。
答案 2 :(得分:0)
在for
函数的upperlower
循环中,您进行比较以进行比较i<length
。 i
是int
变量,length
是您之前声明的函数。
当你在这里引用时,它指向指向函数本身的指针,它不提供函数的结果。
相反,请尝试将i<length
更改为i<length(s)
,这样,length
会返回可与int
进行比较的结果。
对scanf
函数中的main
也可以这样说。在这里,您应该声明一个数组来存储字符串,然后将其传递给函数:`
char str[32];
scanf("%s", str);
upperlower(str)
printf("The character string is %s", str);
getch();
答案 3 :(得分:0)
你在代码中犯了一些错误,如:
s[i] != NULL
进行比较,也许你的意思是\ 0 scanf("%s", upperlower);
for (i = 0; i<length; i++)
你的意思是i < length(s)
除了这些,我改变了这样的主体:
char aStr[1000];
printf("Please write down the character string: ");
scanf("%s", aStr);
upperlower(aStr);
printf("The character string is %s", aStr);
return 0;
在运行它时,我能够看到所需的输出:
~/Documents/src : $ gcc testType.c
~/Documents/src : $ ./a.out
Please write down the character string: Rohan
The character string is rOHAN