在C中使用getchar存储用户输入的多个字符

在C中使用getchar存储用户输入的多个字符,c,string,char,getchar,cs50,C,String,Char,Getchar,Cs50,作为新手,我一直在学习哈佛CS50课程。它演示了一个C程序,让用户输入自己的名字,然后显示包含此输入的基本问候语。然而,CS50演示似乎在序言中使用了一行特殊代码,允许在C中使用带有“string”和“GetString()”的字符串 没有这个,我一直在尝试使用getchar(): #包括 main(int argc,char*argv[]) { printf(“你叫什么名字?”); char name=getchar(); printf(“你好%c!\n”,名称); printf(“你今天看起

作为新手,我一直在学习哈佛CS50课程。它演示了一个C程序,让用户输入自己的名字,然后显示包含此输入的基本问候语。然而,CS50演示似乎在序言中使用了一行特殊代码,允许在C中使用带有“string”和“GetString()”的字符串

没有这个,我一直在尝试使用getchar():

#包括
main(int argc,char*argv[])
{
printf(“你叫什么名字?”);
char name=getchar();
printf(“你好%c!\n”,名称);
printf(“你今天看起来很酷。\n”);
}
我应该从用户输入的任何字符中获取第一个字符,但是如果我尝试将其延长为char name[]的整个字符串的char数组,则在编译时会出现“不正确的初始化”错误。然而,在我提到getchar()的地方,像这样增加阵列容量似乎是解决方案。我也在网上看到了strcpy的使用,但我一直无法做到这一点


我是否忽略了一些非常简单的事情?感谢您对此有任何见解。

此错误取决于编译器。一些编译器给出了错误消息。我的编译器没有(devc++)。
在我的例子中,它忽略了其余的输入字符,使用了第一个输入的字符

您似乎对两种数据类型存在根本性的混淆

char
是一个单字节字符-它只能存储一个字符,当您使用
%c
格式说明符打印时,该字节将在屏幕上转换为单个字符。只要你是詹姆斯·邦德,你的同事是Q、M等等,那就可以了

在我的世界里,人们的名字往往更长。它们用字符数组表示:

将是这样一个数组,有足够的空间容纳99个字符加上终止的
'\0'
。众所周知,将键盘输入读入字符数组是一件非常困难的事情,因为如果你做错了,程序会崩溃或更糟(缓冲区溢出会导致未定义的行为)。避免这种情况的一种(我比较喜欢的)方法是使用
fgets
功能-这不仅指定了输入应该放在哪里,还指定了在那里分配了多少空间:

char name[100];
printf("what is your name?\n");
fgets(name, 100, stdin);
printf("hello %s\nLooking spiffy!\n", name);

如您所见,
fgets
接受三个参数:缓冲区、缓冲区大小和输入流。名称
stdin
被定义为标准输入缓冲区(键盘,除非你做了一些棘手的事情,稍后你会了解到)。注意-您传递的值为
100
,但只会读取99个字符(第100个空格用于nul终止)。

也许您应该坚持使用include文件并使用其字符串方法,只要课程使用该文件,并在课程使用时深入C。您可以在这里找到标题和相关信息:您是否愿意向我们展示您尝试过的导致“不正确的初始化”错误的代码,这样我们就可以告诉您它有什么问题以及如何修复它?在C语言中,用户输入很复杂;您提到的
cs50.h
函数的目的是让新手不必学习所有复杂的C用户输入,并让他们继续编写有效的程序。一旦学生对语言更加熟悉,他们就可以回头看这个主题了。谢谢你的建议,很高兴知道用户输入代码并不琐碎!我将继续学习这些课程,直到加深理解。
char name[100];
char name[100];
printf("what is your name?\n");
fgets(name, 100, stdin);
printf("hello %s\nLooking spiffy!\n", name);