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

小万哥
• 阅读 137

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,关注后即可获取最新文章推送

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

点赞
收藏
评论区
推荐文章
Ustinain Ustinain
3年前
C语言_格式化输入输出
C语言_格式化输入输出我们知道在最开始输入输出的printf和scanf里可以用百分号跟上一个字母d说明要整数的类型,%f说明要以浮点数输出printf()%flagswidth.prechlLty
似梦清欢 似梦清欢
2年前
计算(变量)
include<stdio.hintmain()intprice0;printf("请输入金额(元)");scanf("%d",&price);intchange100price;printf("找您%d元\n",change);return0;上述程序编译执行的结果如下:$cp
桃浪十七丶 桃浪十七丶
2年前
输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。
题目内容:输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。例:(1)输入:Ilovehebeu!输出:character:10,space:2,digit:0,others:1(2)输入:2020,haveabrilliantyear!输出:character:18,space:4,digit:4,others:2答案:c
Wesley13 Wesley13
2年前
C语言函数和汇编函数相互调用(转)
在C程序main函数中,接收用户输入任意个整数,然后在main中调用使用ARM汇编编写的函数(在该函数中完成对这些整数的排序功能),然后再在C程序main函数中输出这些排好顺序的整数。//main.cinclude <stdio.hint main(){    int i0;
Wesley13 Wesley13
2年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
2年前
Go语言fmt.Printf使用指南
Go语言fmt.Printf使用指南fmt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数。fmtfmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。向外输出标准库fmt提供了以下几
小万哥 小万哥
4个月前
C 语言函数:入门指南
C语言中的函数声明和定义您可以通过以下方式创建并调用函数:c//创建一个函数voidmyFunction()printf("我刚被执行了!");intmain()myFunction();//调用函数return0;一个函数包括两个部分:声明:函数名称、返
小万哥 小万哥
4个月前
C 语言教程:数据类型和格式说明符
C语言中的数据类型C中的变量必须是指定的数据类型,并且您必须在printf()函数中使用格式说明符来显示它:c//创建变量intmyNum5;//整数(没有小数点)floatmyFloatNum5.99;//浮点数charmyLetter'D';//字符/
小万哥 小万哥
3个月前
C 语言指针完全指南:创建、解除引用、指针与数组关系解析
C语言中的指针创建指针我们可以使用引用运算符&获取变量的内存地址:cintmyAge43;//一个int变量printf("%d",myAge);//输出myAge的值(43)printf("%p",&myAge);//输出myAge的内存地址(0x7ff
小万哥 小万哥
1个月前
C++ 用户输入与数据类型详解:建立基本计算器及变量类型
C用户输入你已经学习了cout用于输出(打印)值。现在我们将使用cin来获取用户输入。cin是一个预定义变量,它使用提取运算符()从键盘读取数据。在下面的示例中,用户可以输入一个数字,该数字存储在变量x中。然后我们打印x的值:示例cppintx;cou