我在 C 语言中的 scanf 函数中遇到了一些问题.当我编译它时,它显示以下消息:分段错误



好吧,让我在这里具体一点。我想构建一个带有scanf函数的程序,它将要求用户输入类似此示例的信息:

  1. 输入您的年龄here_(假设我在年龄中输入 16((第1次输出(:您的年龄为16
  2. 输入你的名字here_(假设我输入 john((第2输出(:你的名字是约翰现在无需询问用户任何内容,它应该自动给出这样的输出:(第3输出(:你的名字是约翰,你的年龄是16岁。

下面有一张图片将显示我的错误:我拍摄的图像

我的第一个和第二个输出运行良好,但问题出在第三个输出上。它不会在编译器中显示整个第 3 个输出。但它不显示错误或警告,而是显示一条文本,指出"分段错误"。请更正我的代码。拜托拜托。

#include <stdio.h>
int main()
{
int age;
char name;
printf("Enter your age here: ");
scanf("%d", &age);
printf("Your age is %d n", age);
printf("enter your name here: n");
scanf("%s", &name);
printf("Your name is %s and your age is %d.", name, age);
return 0;
}

你声明了一个字符,但你把它当作一个字符串。在 C 中,字符串实际上是字符的一维数组,末尾有一个空字符"\0"。

以下:

"my fun string"

在 C 中等同于此:

{'m', 'y', ' ', 'f', 'u', 'n', ' ', 's', 't', 'r', 'i', 'n', 'g', ''}

您需要为名称分配一个足够大的字符数组。如下所示:

int max_size=120; char name[max_size];

所以你的代码应该看起来像这样:

#include <stdio.h>
int main()
{
    int age;
    int max_size=120;
    char name[max_size];
    printf("Enter your age here: ");
    scanf("%d", &age);
    printf("Your age is %d.n", age);
    printf("enter your name here: n");
    scanf("%s", &name);
    printf("Your name is %s and your age is %d.n", name, age);
    return 0;
}

此外,您可能不应该使用 scanf() . 最好fgets()

相关内容

最新更新