首页
学习
活动
专区
工具
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); // 将一级指针的地址赋值给二级指针

21.4K11

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,然后用输入函数scanf给a赋值(通过键盘敲的数值),最后通过输出函数printf在屏幕显示a的数值,代码如下: #include ...希望读者不用困扰,为什么不直接这么写:scanf(“%d”, a),而要这么写:scanf(“%d”, &a),差别在于是否有“&”,请先这么用着吧!

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

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

    4.3K31

    全国二级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)D中p[6]都是取数组x下标为6的元素的值,A中格式控制符%f与double类型不匹配...先将字符串存于字符数组中,然后将数组名赋给字符指针。选项B为无语法错误,但运行时可能会出现问题。原因是字符指针没有被赋值,是一个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。

    95020

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

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

    80610

    “ 详细过程 各种注意批注 为您的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:

    28510

    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是一个表达式,其功能是求变量的地址。

    1.1K20

    物联网工程师技术之C语言运算符

    在C语言中,等号“=”的作用不是表示相等关系,而是赋值,即将等号右侧的值赋给等号左侧的变量。接下来列举几种常用的赋值运算符,如表3-1所示。...能不能同时给两个变量赋值?能不能将等号左右两边的标识符交换呢?...很遗憾,类似例程3-3中的语句在C语言中是无效的: 例程 32 无效的赋值语句 variable1, variable2 = 45, 60; 第一条语句的含义是“将variable的值赋给常量20 +...第二条语句或许是要将45和60分别赋给变量variable1和variable2,但是C语言并不支持这种写法。...乘法运算符 在数学表达式中,乘号往往省略不写,或是用来表示。但是C语言中,乘号是不可以省略的。

    7410

    指针进阶:函数指针数组——转换表

    前言 在C语言的编程世界中,函数指针是一种非常强大且灵活的工具,它允许我们将函数像变量一样操作。...[5])(int, int); 接下来,我们可以将不同的函数赋值给数组中的每个元素: int add(int a, int b) { return a + b; } int sub(int a, int...multiply函数赋值给数组的第三个元素 func_array[3] = divide; // 将divide函数赋值给数组的第四个元素 // 调用函数指针数组中的函数...我们通过switch-case语句将运算符映射到函数指针数组的索引上,然后直接通过索引调用对应的函数。...如果某个函数的签名不匹配,例如: void print_result(int a, int b) { printf("%d\n", a + b); } 则不能将其赋值给func_array,因为它的返回值类型是

    6010

    计算机萌新的成长历程——初识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;...这里可能就有朋友要说了,你这先编写函数,到后面又要定义变量,还要调用函数,不麻烦吗?你直接像刚开始编写两个数相加那样不就好了吗?干嘛要多此一举呢?

    15630

    轻松拿捏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 ?

    10410

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

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

    48520

    第五节(信息读写基础)

    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()便能将每个值分别赋给相应的变量

    20520

    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.9K20

    C语言----自定义类型:联合和枚举

    联合体的特点是所有成员共⽤同⼀块内存空间,这样一个联合变量的大小,至少是最大成员的大小 (因为联合至少的有能力保存最大的那个成员) 那么为什么这里是4呢?..._b = b;//直接进行赋值 // return 0; //} enum Day//星期 { Mon, Tues, Wed, Thur, Fri,...,到后面就无法进行更改了 SECRET=8 }; int main() { //我们给枚举变量赋值的都是它的可能取值 /*enum Sex sex1 = MALE; enum...2 //那么剩下两个值就是3 4 //如果第1个值不赋值,第二个值赋值为8,那么打印出来的就是0 8 9 //从我们设置的值进行递增,第一个值不设置的话默认就是0...= GREEN;//使⽤枚举常量给枚举变量赋值 //写一个计算器---完成整数的加法、减法、乘法 enum Option { EXIT,//默认的值是0 ADD=1,//值表达的是1

    10210

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

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

    50230

    【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语言中,由一个“=”连接的两个是赋值关系,两个才是相等

    17810

    计算机小白的成长历程——函数(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值的互换。

    38230
    领券