C语言scanf问题

作者&投稿:郟饺 (若有异议请与网页底部的电邮联系)
c语言中scanf语句问题以及数据类型的关系,详细见问题补充。~

事实上不应是scanf("%d",&x);而是scanf("%d
",&x); 否则a[0]读入的是回车符,即
;




在用c语言编写输入语句的时候常用到scanf函数,初学者在刚用scanf函数输入时,经常会遇到各种各样的输入错误,最重要的是一定要记住scanf函数的输入格式,scanf函数里包含了哪些东西,输入的时候就必须有哪些东西,比如:scanf("%c%c%c"),那么输入的时候就必须连续输入3个字符,中间不能有任何空格逗号或者回车符等分开,而如果是scanf("%c,%c,%c"),那么输入3个字符的时候中间就必须用一个逗号分隔。
scanf函数最常用的两种输入方式%d整数输入方式,以及%c字符输入方式。
用%d方式输入整数时,输入一串数字然后按回车符,输入就完成了。而用%c方式输入字符时,就稍微复杂一点。一般来说用%c输入字符时,当输完以后,都习惯按一下回车,这时回车符就成了一个问题。
【例1】:
scanf("%c",&a); /*此时输入一个字符,并按下回车,那么变量a将会正确接收输入的字符*/
scanf("%c",&b); /*但是变量b将会接收到回车符,其值为10,或者说ASCII码为10*/
【例2】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*变量y不会接收到回车符,需要用户继续输入数字,并回车,正常接收到整数*/
【例3】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%c",&a); /*但是变量a将会接收到回车符,其值为10,或者说ASCII码为10*/
【例4】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*若此时输入的是字母而不是数字,比如输入“s”并回车*/
/*那么变量y将不会接收到任何字符或数字,其值保持原样,不发生任何改变*/
scanf("%c",&a); /*此时变量a将接收到上一步输入的字母*/
/*即变量a中存储的字符将是"s",而不是回车符*/
【结论】:
当输入完整数或字符时,后面还需要输入字符时,为了避免输入的字符变成回车符,可以在输入字符前多加一条scanf语句来吃掉前面的回车符。此时用来吃掉回车符的scanf输入可以用%c方式,也可以用%d方式。当用%c方式来吃掉回车符时,回车符被读进了char类型变量中,当用%d方式来吃掉回车符时,回车符并没有被送进int类型变量中,而是在异常的字符输入后,被自动清除了。

你的变量amount是什么类型?

第一题答案: i:10,x:0.300000,j:5
第二题答案:x:12.300000,i:45,y:0.600000
scanf遇空格表示一个变量的输入结束.若连续输入而无空格,它会根据变量的类型来取值;
第一题中,先输的是10.3,而i是整型,所以scanf认为数据是连续输入,会先根据类型来选择变量的值,所以i为10,那么.3就是下一个变量的值了.也就是x的值为0.300000(编译器自动选择六位小数),然后遇到了空格,表示x变量的输入结束,那么下面就是j的值了,因为后来你输入了5空格6,那么j只能取5,遇空格表示结束.而6没有变量接收它.
第二题同理,12.3空格,表示x输入结束,然后输入45.6,因为这次等待接收的变量为整型i,所以只能取45,而scanf此时就认为是连续输入,所以后面的.6就认为是下一个变量的值,遇空格结束,后面的789没有变量接收它.

由于两个变量类型取值范围不同,在输入无人为隔离的情况下(如在输一个数后加空格)系统根据数型取符合类型的最大值,或出现格式错,第一体i先取10,x取小数点后所有,j无取值,出错,下题可用同法分析

第一题:10,5.0,6
第二题:12.3,45,789.0


c语言里,scanf("%s",chars); 如果我一直输入空格,它就一直不会读取是...
c语言里,scanf("%s",chars); 如果一直输入空格,它就一直读取不到chars数组的内容。scanf()是从第一个非空白字符开始读入的(scanf根本不读入空格当然是从第一个非空格读入),详细地说,当我们输入数据时,在按下回车键前输入的数据都储存在缓冲区,按下回车键后,会把数据及换行符一起传送到标准...

c语言中的scanf是什么意思
例如,若要获取用户输入的两个整数并将其相加,可以使用如下语句:scanf("%d%d", &a, &b); c = a + b;其中%d表示将输入的字符串转换为整数,并将其存储在对应的变量中,&符号用于获取变量的地址。需要注意的是,scanf函数本身具有一定的局限性,它只能接受已知的格式化字符串,并且输入字符串的...

c语言scanf输入时可以用逗号吗?
c语言scanf输入时能用逗号隔开,但是输入数据的时候一定也要加上逗号。用scanf()读取数据时,输入的格式必须和scanf()的格式控制字符串对应。对于标准输入函数scanf来说,括号内的格式字符串,也就是由" "中的部分,除了%引导的格式字符之外,所有的其他字符必须在输入数据时原样原位置输入。例如:scaf("...

scanf在c语言中的作用
在C语言中,scanf扮演着至关重要的角色,它是标准库函数,专门用于接收用户输入的数据。这一功能与printf输出数据的功能形成鲜明对比。scanf的输入格式非常灵活,可以根据需要选择,例如,最常见的就是用于接收十进制整数的输入,格式为%d。使用scanf时,可以明确指定变量来接收输入。例如,要输入一个整数并...

c语言中scanf的用法
c语言中scanf的用法是怎样的?让我们一起了解一下吧!scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”,它通常有两种用法。1、 scanf(输入控制符, 输入参数);功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。2、scanf(输入控制...

C语言关于scanf函数的问题?
答:scanf()的功能是从键盘获取数据赋值给对应的变量,括号内包括输入控制符和输入参数两部分。从键盘输入的数据需要转化成输入控制符的格式数据,然后存入输入参数。scanf("%3d",&a);是通过十进制整数3指定输入的宽度,即字符数,超出部分不赋值,故题中只把123赋值给a。scanf("%3c",&ch);通常%3c...

c语言scanf的用法
scanf是C语言标准库中的一个函数,用于从标准输入流读取输入,并根据提供的格式字符串将输入转换为相应的数据类型。以下是scanf函数的基本用法:1、输入整数:输入一个整数,并将其存储在变量num中,格式为:intnum;换行继续输入scanf("%d",&num)。2、输入浮点数:允许用户输入一个浮点数,并将其存储...

C语言关于scanf用法的问题
其实这个问题很有意思,为什么非要传变量的地址而不是直接传变量呢?仅仅说是规定不能让人信服。我们假设scanf函数可以这样给i赋值:scanf("%d",i);而不是scanf("%d",&i);有的人可以说我可以在scanf函数内在取i的地址赋值啊,不也行吗?其实问题就出在这儿,因为c语言是传值的,那么scanf函数内部...

有关C语言的scanf输入问题
假定 scanf("%f%e",&a,&y); 应当是 scanf("%f%e",&x,&y);--- 用的都是 scanf(), 可以看成:scanf("a=%d b=%d %f %e %c %c",&a,&b,&x,&y,&c1,&c2);简单地 用 1行 文字拍入:a=3 b=7 8.5 71.82e0 A a 输出:printf("a=%d b=%d %f %e %c %c...

c语言中关于字符的输入输出问题。 我想知道输入scanf(%c,a[i...
printf 函数称为格式输出函数.一般形式为:printf(“格式控制字符串”,输出表列)scanf 函数在本质上也是给变量赋值,1》但要求写变量的地址,如a。scanf函数中没有精度控制,如:scanf("%5.2f",a);是非法的。不能企图用此语句输入小数为 2 位的实数。2》scanf 中要求给出变量地址,如给出变量名...

襄城县13531154771: 简单C语言scanf输入问题 -
须诗甲硝: (1)我初学c语言时也碰到了跟你一样的问题, 那是因为scanf函数的一个天生的毛病, 你在调用scanf()时,输入一个数字,并按下回车, 你的本意是只想让scanf接受一个数字, 但同时scanf()把那个回车也送入了缓冲区中, 你可以这样改...

襄城县13531154771: C语言中关于scanf的问题 -
须诗甲硝: #include"stdio.h" main() { int a; printf("%d",scanf("%d",&a)); // 这个很明显的告诉我们 scanf()返回的并非我们输入的数值,而返回的是输入了几个数字,这里只输入了一个数 所以返回值为1 如果改为 scanf("%d",&a); printf("%d",a); 则是把我们输入的值A存储在内存中,通过printf()语句显示出来 // }

襄城县13531154771: C语言 格式输入scanf函数 中的问题 -
须诗甲硝: scanf("%d%d%d" -- %d 表示按整型 输入一个数,%d%d%d 表示按整型 输入三个数. scanf("%d%d%d",&a,&b,&c); 后面的 三个参数 &a,&b,&c 表示把依次输入的三个数,按次序 存到 a的地址里,b的地址里,c的地址里.3<回车>4<回车>5<回车> -- 输入的第一个数是 3,第二个数是 4,第三个数是 5.输入数据 的分隔符 是 <回车> 键第一个数是 3,存到 a 第二个数是 4,存到 b 第三个数是 5, 存到 c

襄城县13531154771: C语言关于scanf函数问题
须诗甲硝: 第一个问题,因为你的scanf函数使用了域宽来指定读入的格式.所谓域宽,就是说读入的时候把某个宽度内的值付给某变量.那么.你第一个参数读入规则是%3c,意思是设置域宽为3,读入一个char型数据.你输入的是abcde.那么前面的abc将作为第一个参数给一个char型数据.而char型数据只需要一个字符,所以a就给了c1,其间的bc被忽略.后面同理了.第二个问题,楼上大致说明白了.不解释.

襄城县13531154771: C语言中关于scanf输入字符问题大神速来 -
须诗甲硝: 原因是在input函数里面有接受用户输入的动作,而输入一定是以回车结束,那么这个回车就会残留在缓存中,而当你的scanf读取flag的时候,程序会自动获取前面的那个回车符号,这就是用%c会自动跳过的原因,而用%s的话,程序就会等待下一行输入,回车符号并不会被接收,建议在scanf("%c", &flag);修改为: fflush(stdin); //清空缓存 scanf("%c", &flag);

襄城县13531154771: C语言问题 scanf读取问题 -
须诗甲硝: char类型数据在输入时,用scanf()函数输入时,格式控制串用%c,但由于输入的方式不同,代码要采用不同的语句进行控制.输入一个字符,按一次回车 #include void main() { int i; char ch; for( i=0;i<10;i++ ){ printf("input %d : ", i+1); scanf("...

襄城县13531154771: 有关C语言scanf的问题 -
须诗甲硝: 应该是:scanf("%d%c%d%c“,&a1,&c1,&a2,&c2);%d是要跳过空白符的,而%c是不跳过空白符的 空白符包括空格,横向制表符,换行符,回车符,纵向制表符和换页符.所以要使c1=x,c2=y,那么在x,y之前不应该出现任何空白符,而10和20之前就无所谓了 符合上面条件的只有D,所以正确答案应该是D

襄城县13531154771: c语言中的scanf问题
须诗甲硝: a=87 b=6543.0000 因为第一个百分位宽是2位所把87赋给a 后面6543.0是浮点数赋给b #include"stdio.h" int main() { int a;//876543.0float b; scanf("%2d%f",&a,&b); printf("%f",b);getchar(); }你运行这个程序看一下结果

襄城县13531154771: C语言 scanf问题 -
须诗甲硝: 输入顺序为:c1-a-c2-b,所以应该为A_32B_45.总之在输入变量a的值和c2的值时不能有空格.因为空格会被当成字符赋给变量c2

襄城县13531154771: 一个关于C语言的scanf问题 -
须诗甲硝: 这是关系到键盘缓冲区的问题. 你输入第一个字符后.按空格键的时候.电脑以为 是你输入了第二个字符 所以要清空 ;在第5行和6行中间加一句 fflush(stdin); 就行了!具体是;#include void main() { char a; char b; scanf("%c",&a); fflush(stdin); scanf("%c",&b); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网