我通过edx.org注册了哈佛大学的cs50,我被困在这个问题集上,需要我们创建一个程序,该程序接收人名并给出他们的名字和姓氏的首字母缩写。代码在这里:
string initial (string a);
int main (void)
{
printf("Give me your name\n: ");
string name = GetString();
printf("Give me your second name\n:");
string sname = GetString();
char*c; char*b;
c = name;
b = sname;
printf("%s %s\n", initial(c),initial(b));
}
string initial (char*a)
{
if ( *a >= 'A' && *a <= 'z')
{
return toupper(*a);
else
return ("please retype your name");
}
}
这是我从编译器获取的错误消息。
initials.c:27:16: error: incompatible integer to pointer conversion returning 'int' from a function with result type
'string' (aka 'char *') [-Werror,-Wint-conversion]
return toupper(*a);
^~~~~~~~~~~
initials.c:29:9: error: expected expression
else
^
2 errors generated.
make: *** [initials] Error 1
出了什么问题?
答案 0 :(得分:0)
toupper()
函数不会返回字符串并且c中没有这样的类型,你必须转换每个字符,所以像这样转换第一个字符
a[0] = toupper(a[0]);
return a;
请注意,任何更高级别语言内部发生的事情都是这样,每个字符都是单独转换的。
另请注意,您正在修改传递给函数的同一对象,因此main()
中的变量也将被修改。
更重要的是,使用定义为string
的{{1}}类型是非常误导的,你隐藏了很多重要的事情,程序员必须小心使用
char *
的变量是指针。string
结尾的字符数组,这就是为什么我像我一样编写'\0'
循环。