我一直在努力使用这段代码已有一段时间了。 这是我第一次在这里发帖。我是C的新手,我觉得我差不多了。
我要问你的姓名,中间姓名和姓氏。然后我问候你,并告诉你你的名字的长度。听起来很简单。我有以下代码,我必须使用头文件,因为它在这里,这使事情变得更糟。任何帮助将不胜感激,我觉得我已经将所有知识应用到它,但仍然无法让它工作。
这是我的头文件:
#ifndef NAME_H_
#define NAME_H_
struct name{
char first[20];
char middle;
char last[20];
};
#endif
这是我的.c文件:
#include "name.h"
#include <stdio.h>
#define nl printf("\n");
int strlen(char*s);
char first;
char middle;
char last;
main()
{
printf("enter your first name : ");
scanf("%c", &first);
printf("\n enter your middle initial name : ");
scanf("%c", &middle);
printf("\n enter your last name: ");
scanf("%c", &last);
printf("\n\n Hello %c",first, " %c" ,middle, " %c", last);
printf("\n The String returned the following length: ",strlen);
}
我没有使用printf
和scanf
,然后将名称组件存储为从name.h导入的名称“structure”,最后使用int strlen(char *s);
进行计算。
我使用奇怪的缩进和所有内容获得此输出:
输入您的名字:Joe
输入您的中间名字: 输入您的姓氏:
你好J. String返回以下长度:[ - my user id] $
谢谢!
答案 0 :(得分:0)
关于这一点的一些事情并不完全正确。
首先,你不应该自己宣布strlen
。它是标准的C库函数,这意味着您应该包含适当的标题。在这种情况下,
#include <string.h>
其次,您将输入存储在char
类型的变量中。这些就是他们所说的:他们存储一个角色。因此,除非你只允许人们使用单字符名称,否则你需要的不止这些。这种字符串输入问题在C中实际上相当棘手,因为您必须进行显式内存管理,并且不知道用户将提前向您发送多少数据。其中一个更简单的事情是使用大缓冲区并截断,但对于更复杂的程序,您需要进行错误处理并可能动态调整缓冲区大小。但对于初学者:
char first[1024];
char middle[1024];
char last[1024];
至少可以让你开始。您的struct name
有一些,但您目前没有使用它(尺寸非常小)。
接下来,scanf
是获取输入字符串的棘手方法。 scanf
模式的%s
将很乐意读取超过1024个字符并写入缓冲区的末尾并销毁您的程序。这就是为什么C程序员通常使用fgets
读取输入数据的原因,从那以后你可以更容易地说出你愿意阅读的缓冲区有多大:
fgets(first, sizeof(first), stdin);
请注意,如果用户输入超过1023个字符,它将读取前1023个字符,然后将其余字符留在那里,您将最终将其作为中间名称的一部分进行读取。 C中的字符串处理很复杂! C不擅长这种事情;这就是为什么人们倾向于使用Perl或类似的语言进行这种交互式字符串处理,而你事先并不知道尺寸。在C中,您必须采用一种策略,例如重复调用fgets
,直到在结果的末尾获得换行符,然后决定是否动态调整数据结构大小或抛出错误。或者,您可以将scanf
与%1023s
一起使用,但您需要限定格式以指定最大长度。语法有点奇怪和棘手;当你阅读字符串时,fgets
会更简单。
正如在另一个答案中所提到的,strlen
是一个函数,您需要调用char *
变量(或char
数组)来获取它所拥有的字符串的长度。您可能希望在first
,middle
和last
上对其进行调用,然后将它们添加到一起。
最后,在你的上一个printf
中,你必须传递一种格式,然后传递该格式的所有参数。你想要更像的东西:
printf("\n\n Hello %s %s %s", first, middle, last);
(一旦你修改了这些变量的类型)。
这是很多随机细节。我希望它有所帮助。重要的简要介绍是,C中的字符串是char
的序列,以char
结尾,值为0,所有C数据结构必须提前调整大小(静态或动态调整) malloc
)。此外,C没有边界检查,因此完全取决于您确保只读取为创建空间的数据。
答案 1 :(得分:-1)
使用
strlen(first)
首先获取变量的长度..类似于其他变量...要获得累积长度,请使用
printf("\n Length: ",strlen(first)+strlen(middle)+strlen(last));