写点什么

C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

作者:小万哥
  • 2024-01-04
    广东
  • 本文字数:1418 字

    阅读完需:约 5 分钟

C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

C 语言中的用户输入

您已经学习了 printf() 函数用于在 C 语言中输出值。


要获取用户输入,可以使用 scanf() 函数:


// 声明一个整数变量,用于存储我们从用户那里获得的数字int myNum;
// 提示用户输入一个数字printf("请输入一个数字:\n");
// 获取并保存用户输入的数字scanf("%d", &myNum);
// 输出用户输入的数字printf("您的数字是:%d", myNum);
复制代码


scanf() 函数接受两个参数:变量的格式说明符(在本例中为 %d)和引用运算符(&myNum),用于存储变量的内存地址。

多个输入

scanf() 函数还允许进行多个输入(例如,在下面的例子中,用户可以同时输入一个整数和一个字符):


// 创建一个 int 和一个 char 变量int myNum;char myChar;
// 提示用户输入一个数字和一个字符printf("请输入一个数字和一个字符,然后按回车:\n");
// 获取并保存用户输入的数字和字符scanf("%d %c", &myNum, &myChar);
// 打印数字printf("您的数字是:%d\n", myNum);
// 打印字符printf("您的字符是:%c\n", myChar);
复制代码

获取字符串输入

您也可以获取用户输入的字符串:


// 声明一个字符串char firstName[30];
// 提示用户输入一些文本printf("请输入您的名字:\n");
// 获取并保存文本scanf("%s", firstName);
// 输出文本printf("你好,%s", firstName);
复制代码


注意:当在 scanf() 中处理字符串时,您必须指定字符串/数组的大小(在本例中我们使用了一个非常高的数字 30,但至少可以确定它可以存储足够的名字首字母),并且您不必使用引用运算符 (&)。


但是,scanf() 函数有一些限制:它将空格(空白、制表符等)视为终止符,这意味着它只能显示单个单词(即使您输入了许多单词)。例如:


char fullName[30];
printf("请输入您的全名:\n");scanf("%s", &fullName);
printf("你好,%s", fullName);
// 请输入您的全名:John Doe// 你好,John
复制代码


从上面的例子中,您可能会期望程序打印 "John Doe",但它只打印 "John"


这就是为什么,在处理字符串时,我们经常使用 fgets() 函数来读取一行文本。请注意,您必须包含以下参数:字符串变量的名称、sizeof(string_name)stdin


char fullName[30];
printf("请输入您的全名:\n");fgets(fullName, sizeof(fullName), stdin);
printf("你好,%s", fullName);
// 请输入您的全名:John Doe// 你好,John Doe
复制代码


使用 scanf() 函数获取单个单词作为输入,而对于多个单词,则使用 fgets() 函数。

C 语言中的内存地址

当 C 语言中创建一个变量时,就会为该变量分配一个内存地址。


内存地址是变量在计算机内存中存储的位置。当我们为变量赋值时,值就存储在这个内存地址中。要访问它,可以使用引用运算符 (&),结果表示变量的存储位置:


int myAge = 43;printf("%p", &myAge); // 输出 0x7ffe5367e044
复制代码


注意:内存地址是以十六进制形式表示的 (0x..)。在您的程序中,您可能不会得到相同的结果,因为这取决于变量在计算机内存中的存储位置。


您还应该注意,&myAge 通常被称为 "指针"。指针基本上是将变量的内存地址作为其值存储。要打印指针值,我们使用 %p 格式说明符。


为什么知道内存地址有用?


指针在 C 语言中很重要,因为它们允许我们操作计算机内存中的数据 - 这可以减少代码量并提高性能。


指针是 C 语言区别于其他编程语言(如 PythonJava)的一大特点。

最后

为了方便其他设备和平台的小伙伴观看往期文章:


微信公众号搜索:Let us Coding,关注后即可获取最新文章推送


看完如果觉得有帮助,欢迎 点赞、收藏、关注

发布于: 刚刚阅读数: 3
用户头像

小万哥

关注

代码如人生 2023-02-09 加入

编程爱好者

评论

发布
暂无评论
C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南_程序人生_小万哥_InfoQ写作社区