我仍然是进行函数和C编程的初学者。 我正在尝试制作一个将其转换为大写的函数,但是似乎我把它弄乱了指针(?)
#include <stdio.h>
void mytoupper(char *s[]) {
int i = 0;
while (s[i] != '\0') {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 32;
}
i++;
}
return s;
}
int main(void) {
char s[32];
printf("Insert string:");
printf("%s", s);
printf("%s", mytoupper(s[32]));
return 0;
}
答案 0 :(得分:2)
您的代码中存在多个问题:
mytoupper
的定义不正确:它应该使用char *s
而不是char *s[]
的参数,然后返回char *
。32
,而对于s[i] = s[i] - 'a' + 'A';
使用更通用的方法scanf("%31s", s);
而不是printf("%s", s);
,强烈建议测试scanf()
的返回值printf("%s", mytoupper(s[32]));
中的参数不正确:您应该只写printf("%s", mytoupper(s));
这是更正的版本:
#include <stdio.h>
char *mytoupper(char *s) {
int i = 0;
while (s[i] != '\0') {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 'a' + 'A';
}
i++;
}
return s;
}
int main(void) {
char s[32];
printf("Insert string:");
if (scanf("%31s", s) == 1) {
printf("%s\n", mytoupper(s));
}
return 0;
}
答案 1 :(得分:0)
有些地方无法按您的代码预期工作。
您没有正确获取用户输入,而是尝试打印“空”字符串。
printf("%s",s);
您可以将其更改为:
scanf("%31s",s);
您正在函数mytoupper
中接受一个char指针数组,但这不是必需的。相反,您可以简单地将其传递给一个字符数组。
void mytoupper(char s[])
您正在尝试使用void
函数的返回值。您可以调用函数然后打印字符串,或者让函数返回字符串。
如果要更改字符串然后单独打印,则需要更改mytoupper
以不再返回任何内容,并将其保留为void
返回类型。
mytoupper(s);
printf("%s", s);
或将功能更改为:
char* mytoupper(char s[]) {
然后打印字符串:
printf("%s", mytoupper(s));