首页 > 系统相关 >C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

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

时间:2024-01-04 21:32:35浏览次数:23  
标签:变量 scanf myNum printf 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,关注后即可获取最新文章推送

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

标签:变量,scanf,myNum,printf,fgets,内存地址,输入
From: https://blog.51cto.com/xiaowange/9105192

相关文章

  • getchar()、putchar()、gets()、puts()、scanf()
    getchar()获取单个字符putchar()输出单个字符gets()获取一个字符串puts()输出一个字符串scanf()获取数据相对于getchar()函数,当scanf()遇到空格时,就会自动结束getchar()不会以上头文件<stdio.h>getchar()--putchar()#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ charsex[5]; ......
  • C++(引用符号&、访问内存地址&)
    在C++中,引用符号&和访问内存地址的&运算符有不同的用途和含义。引用符号&:创建引用使用&符号可以创建引用,即给一个变量起一个别名。引用是一个别名,它与原变量共享相同的内存地址。引用在声明时必须初始化,并且一旦初始化后,不能再引用其他变量。intx=10;int&ref......
  • C语言如何处理scanf输入函数不安全的问题?
    要不看到这个警告,只需在整个代码的第一行输入:这样scanf函数就不会报错了。......
  • 软件测试/人工智能|Python 变量解析:从基础概念到内存地址探究
    变量什么是变量?变量是在程序中用于存储数据的名称。它们可以存储各种类型的数据,比如数字、文本、列表、字典等等。变量类型在介绍变量时,可以提及Python中常见的变量类型,例如整数、浮点数、字符串、布尔值、列表、元组、字典等。如下所示:a=1b='muller'c='123'd=......
  • 汇编-Lea将内存地址加载到寄存器
     它的功能主要是将一个有效地址加载到寄存器中,让程序通过寄存器来访问相应的内存地址 lea指令的应用场景在汇编语言中,lea指令应用广泛,它通常用来完成以下几个任务:1.计算地址偏移量:当程序需要访问数组、结构体等数据结构中的某个元素时,我们可以使用lea指令来计算该元素相对......
  • scanf()
    要想破解scanf()输入的问题,一定要学习缓冲区,它能使你对输入输出的认识上升到一个更高的层次,以后不管遇到什么疑难杂症,都能迎刃而解。可以说,输入输出的“命门”就在于缓冲区。scanf()是从标准输入设备(键盘)读取数据,带有行缓冲区的,这让scanf()具有了一些独特的“性格”,例如可以......
  • scanf
    在C语言中,scanf函数从标准输入(键盘)读取用户输入的数据。这是一个常用的函数,但也有很多注意事项和细微差别需要了解。基本语法:intscanf(constchar*format,...);参数:format:一个字符串,指定输入的格式。...:可变参数,根据格式字符串来确定类型和数量。返回值:该函......
  • scanf():
    scanf():和printf()类似,scanf()可以输入多种类型的数据。 =scanformat 格式化扫描,也就是从键盘获得用户输入,和printf的功能正好相反#include<stdio.h>intmain(){inta=0,b=0,c=0,d=0;scanf("%d",&a);//输入整数并赋值给变量ascanf("%d",&b);//输......
  • python 打印当前函数的内存地址
    Python打印当前函数的内存地址在Python中,函数也是对象。每个函数对象在内存中都有一个唯一的地址。如果我们想要获取当前函数的内存地址,可以使用id()函数。本文将介绍如何在Python中打印当前函数的内存地址,并提供相应的代码示例。函数是对象在Python中,函数是一种特殊的对象。它......
  • scanf和赋值忽略符用法
    一.scanf基本用法 1.scanf()函数用于读取用户的键盘输入。scanf()处理数值占位符时会自动忽略空白字符,包括空格、制表符、换行符等。所以,用户输入数据之间,有一个或多个空格不影响scanf()解读数据,另外,用户使用回车键,将输入分成几行,也不影响解读。二.scanf的返回值 1.scanf()的返......