首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能将scanf语句直接赋值给C中的变量?

在C语言中,scanf函数用于从标准输入流(通常是键盘)读取用户输入,并将输入的值存储到指定的变量中。然而,scanf函数返回的是成功读取的项目数,而不是用户输入的值本身。因此,不能直接将scanf语句赋值给变量。

具体来说,scanf函数的原型如下:

代码语言:txt
复制
int scanf(const char *format, ...);

其中,format参数是一个格式字符串,用于指定输入的格式。在格式字符串中,可以使用特定的格式指示符来匹配不同类型的输入,如"%d"表示整数,"%f"表示浮点数,"%s"表示字符串等。

在调用scanf函数时,我们需要提供一个或多个变量作为参数,用于存储输入的值。这些变量需要使用取地址运算符"&"来获取其地址,以便scanf函数可以将输入的值存储到正确的位置。

例如,假设我们想从用户输入中读取一个整数并将其存储到变量num中,可以使用以下代码:

代码语言:txt
复制
int num;
scanf("%d", &num);

在这个例子中,"%d"表示要读取一个整数,"&num"表示变量num的地址。scanf函数将读取用户输入的整数,并将其存储到num变量中。

需要注意的是,由于scanf函数返回的是成功读取的项目数,我们可以使用它来检查输入是否成功。例如,如果我们期望用户输入两个整数,并且希望确保两个整数都成功读取,可以使用以下代码:

代码语言:txt
复制
int num1, num2;
int result = scanf("%d %d", &num1, &num2);
if (result == 2) {
    // 两个整数都成功读取
} else {
    // 输入失败
}

总结起来,不能将scanf语句直接赋值给C中的变量是因为scanf函数返回的是成功读取的项目数,而不是用户输入的值本身。为了将用户输入的值存储到变量中,我们需要使用取地址运算符"&"来获取变量的地址,并将其作为参数传递给scanf函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 值 | 在函数 间接修改 指针变量 值 | 在函数 间接修改 外部变量 原理 )

文章目录 一、直接修改 和 间接修改 指针变量 值 二、在函数 间接修改 指针变量 值 三、在函数 间接修改 外部变量 原理 一、直接修改 和 间接修改 指针变量 值 ---- 直接修改 指针变量...值 , 就是为其赋值一个地址值 , 使用 & 取地址符 , 将变量地址赋值指针变量 , 或者使用 malloc 函数分配内存赋值 指针变量 ; // 将变量地址赋值一级指针 p...= &a; 间接修改 指针变量 值 , 首先要 将 指针变量 地址值 , 赋值 1 个 二级指针 变量 , 通过 * 符号 , 间接修改 一级指针变量值 ; // 将一级指针地址赋值二级指针...间接修改 指针变量 值 ---- 在 函数 间接修改 指针变量 值 , 将 指向一级指针 二级指针 变量 , 传递到 函数形参 , 在 函数 , 使用 * 符号 , 修改 二级指针 指向...// 将变量地址赋值一级指针 p = &a; // 打印一级指针地址 printf("%d\n", p); // 将一级指针地址赋值二级指针

20.8K10

C语言编程入门之--第五章C语言基本运算和表达式-part1

,最后加分号表示结束,如下: int a,b,c,d;   也可以在定义变量时候,直接赋值,这就要用上赋值表达式,如下: int a = 3;   赋值意思就是赋予数值,也可以多个一起,如下: int...a = 3, b = 4, c = 5;   当然也可以定义完变量后,再变量赋值,如下: int a; a = 3;   请注意,C语言中,规定变量定义必须是代码最开始部分,比如以下在C语言建议这么做...5.1.3 再来一个C库函数scanf以及格式化输入 屏幕显示程序数据,叫做输出,敲键盘传入程序数据,叫做输入。输出函数一般用printf,输入函数一般用scanf。...下面来写一段程序,程序大体思路是,先定义一个变量a,然后用输入函数scanfa赋值(通过键盘敲数值),最后通过输出函数printf在屏幕显示a数值,代码如下: #include ...希望读者不用困扰,为什么直接这么写:scanf(“%d”, a),而要这么写:scanf(“%d”, &a),差别在于是否有“&”,请先这么用着吧!

58130

c语言scanf函数用法详解_c语言输入scanf格式

概述 scanf 功能用一句话来概括就是“通过键盘程序变量赋值”。...综上所述,scanf 语句意思就是:从键盘上输入字符 123,然后%d将这三个字符转化成十进制数 123,最后通过“取地址 i”找到变量 i 地址,再将数字 123 放到以变量 i 地址为地址变量...注意,为什么直接说“放到变量i”?而是说“放到以变量 i 地址为地址变量”?因为这么说虽然很绕口,但是能加强对 &i 理解,这么说更能表达 &i 本质和内涵。...通过键盘多个变量赋值一个变量赋值其实是一样。...比如两个变量赋值就写两个 %d,然后“输入参数”对应写上两个“取地址变量”;三个变量赋值就写三个 %d,然后“输入参数”对应写上三个“取地址变量”…… 但是需要注意是,虽然 scanf 没有加任何

3.6K31

全国二级C知识点总结4-指针

*p++; 【解析】*和++同级别,按自左向右结合方向,因此D选项可转变为*(p++),从而只是使指针发生移动,而不能将p所指变量增1 例2.(06—04—24)若有说明语句:double *p,a;...则能通过scanf语句正确输入项读入数据程序段是 (D) A)*p=&a; scanf("%lf",p); B)*p=&a; scanf("%f",p); C)p=&a; scanf...可以一个指针赋值只能是一个与该指针同类型指针(或地址值);故A、B选项错误;C选项声明指针出错,P前面的指针说明符*不能省略。...x下标为6元素地址可以有&x[6],x+6,p+6,&p[6],scanf后面的参数列表必须是地址列表,B*(x+6)Dp[6]都是取数组x下标为6元素值,A中格式控制符%f与double类型匹配...先将字符串存于字符数组,然后将数组名赋字符指针。选项B为无语法错误,但运行时可能会出现问题。原因是字符指针没有被赋值,是一个不确定值,指向一个不确定内存区域,这个区域可能存放有用指令或数据。

89520

C语言】scanf多组输入三种方法!

由博主大家讲解讲解讲解关键点 scanf 功能用一句话来概括就是“通过键盘程序变量赋值”。...注:所以这里scanf 语句意思就是:从键盘上输入字符 123,然后%d将这三个字符转化成十进制数 123,最后通过 “取地址 i” 找到变量 i 地址,再将数字 123 放到以变量 i 地址为地址变量...双精度浮点型格式 %p 地址格式 %c 字符格式 %s 字符串格式 %p 地址格式 示例二: scanf(“输入控制符非输入控制符”, 输入参数); 这种用法几乎是不用,也建议你们使用。...但是经常有人问,为什么 printf 可以有“深红色文字 非输出控制符”,而 scanf 中就不可以有“非输入控制符”。事实上不是不可以有,而是没有必要!...比如要从键盘变量 i 赋值 123,那么必须要输入i=123才正确,少一个都不行,否则就是错误。

34110

“ 详细过程 各种注意批注 为您python基础学习保驾护航!

· 我们行为是变量赋值 · **2是求平方和 **3就是求3次方 以此类推 变量是一个可以用来存储数据空间,它会占用在内存上 变量语法 定义变量 Average...· = = 表示赋值,注意和==区分即可 = 可以链式赋值和多元赋值 链式赋值 a = b = 10 tip:建议使用 多元赋值 a , b = 10 , 20...缩进(一个tab或者四个空格)来判定 (类似于{},但他不用) 多分支语句是else if缩写 elif 举一个栗子 scanf = input("输入1为真,输入0为假"...然后c了l 有一个通用编程原则,是一个代码只做一件事,写功能单一代码,不进行复杂处理,可以提高代码可维护性(逻辑与界面分离) 一个函数可以有多个返回规则...函数,可以形参制定默认值 带有默认值参数,可以在调用时候传参 def add(x,y,debug=False): if debug:

20510

C语言入门系列之3.顺序程序设计和输入输出

例如:a=b=c=d=e=5; 按照赋值运算符右结合性,因此实际上等效于:e=5; d=e; c=d; b=c; a=b; 在变量说明变量赋初值和赋值语句是有区别的: 变量赋初值是变量说明一部分...例如:int a=5,b,c; 在变量说明,不允许连续多个变量赋初值。 如int a=b=c=5;是错误,必须写为int a=5, b=5, c=5;,而赋值语句允许连续赋值。...地址表列给出各变量地址,地址是由地址运算符& 加变量名组成。 例如&a, &b分别表示变量a和变量b地址,这个地址就是编译系统在内存a、b变量分配地址。...在赋值表达式变量赋值,如a = 567;,a为变量名,567是变量值,&a是变量a地址。...但在赋值号左边是变量名a,不能写地址,而scanf函数在本质上也是变量赋值,但要求写变量地址,如&a。 这两者意义是不同,&是一个取地址运算符,&a是一个表达式,其功能是求变量地址。

95420

计算机萌新成长历程——初识C语言12

大家好,咱们又见面了,前面我们一起探讨了选择语句和循环语句相关知识点,在此过程自己也是收获颇丰。今天我们将一起探讨一下函数相关内容。...下面我们先来了解一下函数在计算机作用: 这里我们要在此提到库函数了,大家回想一下,我们在接触库函数时候是不是拿出来就可以直接使用了,不需要去把对应法则从头定义一遍,就比如输入函数scanf,我们在使用时候...c值返回到add; } int main() { int x = 0;//根据实际情况不同,变量字符不相同,这里我们定义整型变量x,并将0赋值x; int y = 0;//定义整型变量y,并将...0赋值y; int z = 0;//定义整型变量z,并将0赋值z; printf("输入两个数\n"); scanf("%d%d", &x, &y);//输入两个整数,并依次赋值x、y;...这里可能就有朋友要说了,你这先编写函数,到后面又要定义变量,还要调用函数,麻烦吗?你直接像刚开始编写两个数相加那样不就好了吗?干嘛要多此一举呢?

12930

c语言输入输出格式

但从结果可以看出是不同为什么结果会不同呢?就是因为printf函数对输出表各量求值顺序是自右至左进行。在式,先对最后一项“-i--”求值,结果为-8,然后i自减1后为7。...地址表列给出各变量地址。地址是由地址运算符“&”后跟变量名组成。例如,&a,&b分别表示变量a和变量b 地址。这个地址就是编译系统在内存a,b变量分配地址。...在赋值表达式变量赋值,如: a=567 在赋值号左边是变量名,不能写地址,而scanf函数在本质上也是变量赋值,但要求写变量地址,如&a。这两者在形式上是不同。...在本例,由于scanf函数本身不能显示提示串,故先用printf语句在屏幕上输出提示,请用户输入a、b、c值。执行scanf语句,则退出TC屏幕进入用户屏幕等待用户输入。...其一般形式为: getchar(); 通常把输入字符赋予一个字符变量,构成赋值语句,如: char c; c=getchar();#include void main()

2.8K20

重温C语言,这三十多个细节你把握住了?

C语言为什么内置输入输出语句?...C语言了程序员极大细节操作权限,连内存分配都给了。只是我们自己把握不住而已,C语言水太深了。 ---- C语言为什么内置输入输出语句?...难度指数:2颗星 / 细节指数:4颗星 / 重要指数:3颗星 别说输入输出了,包任何头文件,不知道还能写什么C代码。 为什么要这样呢?像Python那样都内置了不好吗?...当下基本不会有什么坏处,当下咱头脑坑定是清醒,知道为什么写。 但是修改代码时候呢?如果要在这种循环下动刀,却又忽略了这个括号呢? 前两天就遇到了,浪费五分钟去调试。...流读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工输入,但是如果你输了多个字符,以后getchar()再执行时就会直接从缓冲区读取了

46320

轻松拿捏C语言——分支语句

if(a==3) printf("a is 3\n"); 注意:相等运算符 == 与赋值运算符 = 是两个⼀样运算符,不要混淆。...if(x = 5) { …… } 这个代码表示变量x赋值5,则x一定为非0,一定会执行if语句 上述代码可能将x == 5 错写成了 x = 5 ,其愿意应为判断变量x是否为5,则代码应为...注:C语⾔,⾮0表⽰真,0表⽰假 1.3.1 逻辑取反运算符 !...; return 0; } 在C语言中,0为假,非0表示真,也就是表达式结果如果是0,则语句执行,表达式结果如果不是0,则语句执行。...2.6条件表达式 C语言提供了一种特殊运算符,其允许表达式根据条件值来产生两个值一个。条件操作符也叫三目操作符,需要接受三个操作数,形式如下: exp1 ?

6310

C语言】求任意两整数和入门详解

今天我们来看这个使用c语言编写一个简易求和程序 : 代码如下: #define _CRT_SECURE_NO_WARNINGS 1 //该行代码用来解决scanf函数报错推荐使用scanf_s...a""b""c",并给它们赋值为0; scanf("%d %d", &a, &b); //scanf 格式输入 此行意义在于可以让代码在运行界面任意输入两个整数求和 //%d 代表一个整数 ,...&a,&b 意思是这两个整数分别对应a和b c = a + b; //将a+b值赋c printf("c=%d",c); //在屏幕上打印出一个整数=c return 0; } //结束运行...如果采用“int a;”方式仅声明但不初始化方式创建变量是不可以直接使用,如图:编译系统会报错 3.scanf():我们先来看定义 特别注意:scanf函数后变量名前一定要带&(寻址操作符...4.c=a+b:注意,该条语句意思是"将a+b值赋c",而不是“令c等于a+b”。在c语言中,由一个“=”连接两个是赋值关系,两个才是相等

13910

半小时一篇文过完C语言基础知识点

太菜了吧(4)原来早就会编程了 《看聊天记录都学不会C语言?太菜了吧(5)打了一把游戏学会了一个编程知识? 《看聊天记录都学不会C语言?...} 五、输入 在C语言中可以从键盘输入一个值并且赋值一个变量。...,a); } } 以上代码使用了if语句对输入值进行判断,在使用scanf后将值存入了变量a,之后使用if语句在if语句圆括号输入条件,如果这个条件成立则运行后面花括号代码printf("...,在else if语句中可以增加多个判断条件,判断a为什么。...while是重复关键字,你可以当作一个魔法咒语,直接使用while在后面的圆括号是while循环条件,在这里是a<10,意思是只要a这个变量存储值不大于10,那么就会一直循环;圆括号后花括号是需要重复代码

47130

第五节(信息读写基础)

scanf()函数以指定格式从键盘读取数据,并将输入数据赋值程序一个或多个变量。 printf() 和scanf() 都使用格式字符串描述输入格式。...scanf()函数格式字符串使用转换说明与printf()函数相同。 例如  语句scanf("%d", &x) ; 读取用户从键盘输入一个十进制整型数,并将其赋值整型变量x。...同样地,下面的语句读取用户从键盘输入一个浮点型值,并将其赋值浮点型变量rate : scanf("%f", &rate); 变量名前面的&是什么?...下面的语句输入一个整型值和一个浮点型值,并将它们分别赋值变量x和rate : scanf ("&d %f", &X,&rate); 输入多个变量时,scanf() 使用空白将输入分隔成多个字段。...以上面的scanf()为例,用户可以输入 10 12.45 也可以这样 10 12.45 更可以这样 10 12.45 只要输入值之间有空白,scanf()便能将每个值分别赋相应变量

16220

计算机小白成长历程——函数(1)

", &a, &b);//通过scanf函数给两参数赋值; int c = MAX(a, b);//将参数a,b传送给自定义函数MAX,并将MAX返回值赋值c; printf("MAX=%d\n...x : y); } int main() { int a, b;//定义参数; scanf("%d%d", &a, &b);//通过scanf函数给两参数赋值; int c = MAX(a, b)...;//将参数a,b传送给自定义函数MAX,并将MAX返回值赋值c; printf("MAX=%d\n", c); return 0; } 这里我们也可以输入55、89来看一下运行结果: 相信各位朋友通过这个例子能够更好理解自定义函数了...,下面我们接着看下一个例子; (2)写一个函数可以交换两个整型变量内容: 这个内容我们之前也接触过很多次了,前面我们都是直接在主函数完成交换内容,那么今天我们来尝试一下通过自定义函数来完成交换内容...a和b地址一致,紧接着我们在函数体内通过解引用操作符将a和b值分别取出来赋值变量z和*x最后再将变量z赋值*y完成值交换,经过这一系列操作后,最终完成a、b值互换。

18330

C++】命名空间&缺省参数&函数重载&引用&内联函数

:  4.C++输入和输出 5.缺省参数(缺省==省==写上) 6. ...如果就是想要达成本意这个目的,C语言明显做不到(有命名冲突问题),所以C++就使用namespace命名空间域来完善C } 这是将int scanf=10;放在了局部,定义int scanf时候还是可以...(const修饰)来临时保存,然后赋值ret。...------>空间换时间所以适合将那些函数内部代码量比较少且频繁被调用函数定义成内联。当把大函数定义成内联时,编译器直接搭理你定义内联。...备注:当调用1000次时,内联展开和调用函数指令数是截然不同。 2.内联建议声明和定义分离,因为内联函数没有地址(直接展开了),会导致链接时找不到。

79430

C语言总集篇】分支与循环篇——从不会到会过程

case 5: printf("礼拜五\n"); case 6: printf("礼拜六\n"); case 7: printf("礼拜天\n"); } return 0; } 这段代码意思是输入一个数并将此数赋值变量...3.while语句break和continue break 在开关语句——switch语句中我们就有介绍到,作为转向语句,它在switch作用就是将不同情况独立出来,使它们各个情况之间互不干扰...for语句循环次数,也是执行语句执行次数,更是变量i个数,我们可以从这种写法中直接判断出for语句在正常运行时需要执行多少次。...这里我们来分析一下这个代码选择语句if(a= 5),此时if中使用操作符时“=”不是“==”,“=”意思是赋值,此时语句意思是将5赋值a,在回到判断语句时一直重复是6<10判断为真,进入循环...+) { c++; printf("hehe%d\n", c); } return 0; } 从这个代码我们就可以看到,此时for循环中通过变量x和变量y来进行控制,能否正常运行呢?

28210

C语言总集篇】函数篇——从不会到会过程

; int c = MAX(a, b);//将参数a,b传送给自定义函数MAX,并将MAX返回值赋值c; printf("MAX=%d\n", c); return 0; } 下面我们借助这个代码来分别介绍一下自定义函数四个部分及其作用...x : y); } int main() { int a, b;//定义参数; scanf("%d%d", &a, &b);//通过scanf函数给两参数赋值; int c = MAX(a, b)...;//将参数a,b传送给自定义函数MAX,并将MAX返回值赋值c; printf("MAX=%d\n", c); return 0; } 可以看到,在函数体,我们直接通过三目操作符来找出这两个数最大值...x、y; { int z = *x;//*——解引用操作符,此时*x等价于变量a,所以这里需要有整型变量来接收a值; *x = *y;//*y等价于b,此时将*y赋值*x就等价于b赋值a;...通过这个例子,不知道大家有没有那种醍醐灌顶感觉。有朋友可能就会说了,既然迭代就是在函数体中使用循环,那为什么直接在主函数体中使用循环呢?这样不是更简洁一点吗?

23911
领券