【问题标题】:Using getchar in C to store user input of multiple characters在 C 中使用 getchar 存储多个字符的用户输入
【发布时间】:2014-08-10 19:23:16
【问题描述】:

作为一名菜鸟,我一直在学习哈佛 CS50 课程。有一次它演示了一个 C 程序,该程序让用户输入他们的姓名,然后显示包含此输入的基本问候语。但是,CS50 演示似乎在序言中使用了一个特殊行,它允许在 C 中使用带有“string”和“GetString()”的字符串。

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

#include<stdio.h>



main(int argc, char *argv[]) 

{

    printf("What's your name? ");    
    char name = getchar();  
    printf("Hello %c!\n", name);
    printf("You're looking cool today.\n");


}

我从用户输入的任何内容中取回第一个字符,但是如果我尝试将其延长到一个字符数组,用于整个字符串的字符名 [],我会在编译时收到“初始化不正确”错误.然而,我在任何地方都看到提到 getchar(),像这样增加数组容量似乎是解决方案。我也在网上看到了 strcpy 的使用,但我一直无法完成这项工作。

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

【问题讨论】:

  • 也许你应该坚持使用 包含文件并使用他们的字符串方法,只要课程使用它并在课程使用时深入了解 C。您可以在这里找到标题和相关信息:https://manual.cs50.net/library/
  • 您想向我们展示您尝试过的导致“不正确初始化”错误的代码吗?或许我们可以告诉您它有什么问题以及如何解决它?
  • 在 C 中稳健地进行用户输入是很复杂的;您提到的cs50.h 函数的目的是让新手不必学习所有复杂的 C 用户输入,让他们继续编写有效的程序。一旦学生对语言更加熟悉了,他们就可以回去看看这个话题。
  • 感谢您的建议,很高兴知道用户输入代码并非微不足道!我将继续学习,直到我更好地理解为止。

标签: c string char getchar cs50


【解决方案1】:

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

char

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

在我的世界里,人们通常有更长的名字。这些用字符 array 表示:

char name[100];

将是这样一个数组,有足够的空间容纳 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 终止)。

【讨论】:

    【解决方案2】:

    错误与编译器有关。一些编译器给出错误。我的编译器没有(Dev C++)。 在我的例子中,它忽略了其余的输入字符并使用了第一个输入的字符。

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多