gpt4 book ai didi

c - 输入姓名并输出姓氏和名字的首字母

转载 作者:行者123 更新时间:2023-11-30 16:50:41 24 4
gpt4 key购买 nike

我通过 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

出了什么问题?

最佳答案

toupper() 函数不返回字符串,并且 c 中没有这种类型,您必须转换每个字符,因此像这样转换第一个字符

a[0] = toupper(a[0]);
return a;

请注意,任何高级语言内部发生的情况都是如此,每个字符都是单独转换的。

另请注意,您正在修改传递给函数的同一对象,因此 main() 中的变量也会被修改。

更重要的是,使用定义为 char *string 类型非常具有误导性,你隐藏了许多 C 程序员必须小心的重要事情

  1. string 类型的变量是指针。
  2. 字符串实际上是一个以 '\0' 结尾的字符数组,这就是为什么我像以前一样编写了 for 循环。
  3. 通过定义此类类型,程序员可能会推断可以使用 + 运算符连接字符串,但这只会导致所谓的未定义行为。

关于c - 输入姓名并输出姓氏和名字的首字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42117085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com