好吧,让我在这里具体一点。我想构建一个带有scanf函数的程序,它将要求用户输入类似此示例的信息:
- 输入您的年龄here_(假设我在年龄中输入 16((第1次输出(:您的年龄为16 岁
- 输入你的名字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()
。