我正在尝试编写一个C程序,使用字符串和指针打印最终用户名的首字母 . 我在评论中写了我认为函数需要做的插图 .
到目前为止,这是我的进展:
#include <stdio.h>
#include <string.h>
#define MAX_BUFFER_LENGTH 31
char userInitials(char *name)
{
// Initialize the character array "name" and set to zero
// Determine the length of the string using strlen
// Print the first valid input of the string
// Loop through the string until a space is found
// When a space is found, print the next valid input
for (int i = 0; i < MAX_BUFFER_LENGTH; i++)
{
name[i] = 0;
}
int length = strlen(name);
if (name[0] != ' ' && name[0] != '\0')
{
printf("%c\n", name[0]);
}
for (int i = 0; i < length; i++)
{
if (i + 1 < length && name[i + 1] != ' ')
{
printf("%c\n", name[i + 1]);
}
}
}
char main()
{
char name[MAX_BUFFER_LENGTH] = " ";
printf("Enter your full name and I'll print your initials: ");
scanf_s("%[^\n]", &name, MAX_BUFFER_LENGTH);
printf("Your name is: %c\n", name);
printf("Your initials are: %c\n", userInitials(name));
}
我的程序目前停留在第42行:
printf("Your initials are: %s\n", userInitials(name));
Visual Studio返回一条错误消息:
(42): warning C4477: 'printf' : format string '%s' requires an argument of type 'char *', but variadic argument 1 has type 'int'.
我也不确定该功能是否也能正常工作,因为第33行有一个我不明白的错误(我在第26-33行发布了插图):
for (int i = 0; i < length; i++)
{
if (i + 1 < length && name[i + 1] != ' ')
{
printf("%c\n", name[i + 1]);
}
}
}
Visual Studio返回错误消息:(33):警告C4716:'userInitials':必须返回一个值 .
我真的很努力让这个工作,我的教师不太擅长解释如何解决错误信息 . 我非常感谢你的时间和帮助 .
2 回答
首字母应该从
userInitials()
打印或返回到main()
以在那里打印 . 不是都 .考虑使用可以容纳多个
char
的返回类型声明userInitials()
,例如通过引入包含两个首字母的数据结构并相应地调整功能签名:
Printf格式字符串参数
%s
需要指向char的指针 .你的函数返回一个char(不是指针),
至少原型是这样的,即使代码没有 .
这条消息非常清楚地告诉你 .
要打印单个字符,请使用
%c
.您的函数
userInitials()
不返回任何内容,因为它不包含单个return
语句,这是您的问题的第二部分的原因 .AlexeiLevenkov(在上面的评论中)提供了一个有用的链接,用于讨论这个错误的Microsoft内容,以及带有注释
return
的函数示例:https://docs.microsoft.com/en-us/previous-versions/ft5xye74(v=vs.140)
(顺便说一句,StackOverflow在这里只能一次询问一个问题 . 有关多个问题的问题有可能因为过于宽泛而被关闭 . )