询问姓名并显示输入

时间:2018-09-12 04:04:00

标签: c

我对C语言和StackOverflow比较陌生。我正在尝试编写一个简单的C代码,该代码将提示用户输入他们的姓名,然后显示它。

#include <stdio.h>

int main (void)
{
  char name;

 printf("Let's do this, please enter your name:");
 scanf("%s", &name);
 printf("Your name is %s", name);

 return 0;
}

代码符合要求,但输入名称后,显示分段错误(核心已转储)。

谢谢您的帮助。

5 个答案:

答案 0 :(得分:1)

@Jackie_Legs一个非常小的错误。在变量name的声明中,您已将其声明为char。因此它只包含一个字符。

解决方案:为您的名字选择任意大小,例如10或15个字符。并声明为大小数组。

char name[15];

程序的任何其他部分均未更改。另外,您应该在&中省略字符串中的scanf符号。

因此只需进行一次更改,您的代码就可以工作。

这是可以使用的更新代码:

#include <stdio.h>

int main (void)
{
  char name[15];

  printf("Let's do this, please enter your name:");
  scanf("%s", name);
  printf("Your name is %s\n", name);

  return 0;
}

答案 1 :(得分:1)

这是因为您的name变量只能存储单个字符,并且您试图存储多个字符,这将导致程序的行为无法预测(例如分段错误)。

如果知道名称的最大长度,则将变量名称声明为字符数组,例如

char name[20]; 

您可以在此处存储最大长度为19个字符的名称。您可以根据需要决定数组的长度。

答案 2 :(得分:1)

您需要声明一个字符串,因为单个字母存储在char中,并且多个字符以及最后一个空字符组成一个字符串,可以是诸如名称等之类的字符串。

在您的代码中,您采用了char,该char仅存储一个字符,但是为了存储您的名称(字符串),您将必须采用char数组以及该数组的大小。

char 替换为 char[size],其中size是所需字符串的大小。

这是我对您的代码所做的更改:

#include <stdio.h>

int main (void)
{
  char name[30];

 printf("Let's do this, please enter your name:");
 scanf("%s", name);
 printf("Your name is %s", name);

 return 0;
}

答案 3 :(得分:0)

由于C中的char name; char 数据类型仅在变量中包含1个字符,因此引发了错误。但是您的输入是一个字符串。 您需要将变量的声明从char更改为char数组。

char name[50];
 printf("Let's do this, please enter your name:");
 scanf("%s", name);
 printf("Your name is %s", name);

答案 4 :(得分:0)

name被声明为char,这意味着它只能包含一个字符。仅仅包含一个字符串(通常由名称组成)是不够的。您需要声明一个char数组(一个字符数组)。

数组的大小至少应比要读取的最大名称大1。 多余的字节将包含空终止符'\0'

char name[SizeOfLargestName + 1];

使用scanf时,不需要使用&,因为现在名称指向数组的第一个字节。

 scanf("%s", name);