C语言程序 ,不是说不能要求scanf函数指定输入长度吗?

作者&投稿:邵谢 (若有异议请与网页底部的电邮联系)
C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格?用scanf还有哪些要注意?~

%c前面的空格就是用来屏蔽空白符的,
首先必须要知道C语言 scanf() 函数的特性,以及scanf()与缓冲区、标准输入流之间的联系。在此之前,先介绍两个专业术语。
1.缓冲区
缓冲区是一块存放临时输入数据的内存,我们在键盘上输入数据之所以不会马上显示,就是因为数据存放在了缓冲区,在上面例子中,当我们按下回车键后,缓冲区的数据会传送到标准输入流。
2.标准输入流
标准输入流(stdin)是文件指针,scanf()就是从标准输入流或许数据。

以上面代码为例,当执行到scanf()时,
电脑开始执行以下操作:
开始等待用户输入
2.当我们输入数据,在按下回车键前会把数据储存在缓冲区,按下回车键后,会把数据以及换行符(
)一起传送到标准输入流(stdin)中,
scanf()就是从标准输入流中或许数据,上面第一个scanf()要读入一个整数,它从标准输入流中查找,跳过空白符(空格、换行符、制表符)
3.如果遇到数字,则开始读入,直到遇到非数字的字符结束,最后计算读取到的数值,储存到相关变量中。
使用scanf注意事项
1.参数的个数一定要对应
2.输入的数据类型一定要和所需要的数据类型一致
3.每次调用完scanf后,记得调用一个getchar()函数
扩展资料
1.函数 scanf() 是从标准输入流stdio (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
2.函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。
每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
参考资料
网页链接

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Windows\SysWOW64\KernelBase.dll', no matching symbolic information found.
这些跟你的程序没关系。它是vs系列编程软件编译时,默认的要去找相关模块的符号文件。这个符号文件用于调试,一般编程不需要。
看情况你的代码是正常退出了。问题就出现在scanf上。建议你不要使用这个函数,在循环输入时使用它不行。用gets就好了 。

不对,scanf只是不能指定输入精度而不是长度
比如%m.nf这种格式是不允许的,但可以使用%mf(其中m和n都是整数)
不过对于%s输入字符串来说,指定长度没有用,其它的类型都能用

这题应选B,变量a只有2位长度

可以指定输入长度的。
只不过很少用。
比如这个 就是读2位给a 于是a=87
再读给b,识别到6后面是空格 b=6.00000
选B 。
之所以很少用这个格式, 是因为没必要。 实际输入中很少有限定输入位数的。

你自己编程输出试一下就知道了


瑞安市18799706009: 解释一下C语言getc gets getchar scanf 区别 -
望梁全威: 给你说下经常用到的几点:1. getchar只能用作字符数据读取(就算输入的是9,但是读取的是'9',如果以整形输出就是字符9的ASCII值),而scanf可以用很多,比如整形丶字符丶字符串等. 2. gets()接受的是字符串,括号里面一般是地址,比如char a[8],即就是把字符数组名放进去括号里,gets(a) 3. getchar和gets只是scanf的一种简便写法. 4. getc我用的不多,就不说了

瑞安市18799706009: C语言:while(scanf("%d",i)) 问题 -
望梁全威: scanf()函数返回成功赋值的数据项数而不是值,所以你这里返回的永远是1

瑞安市18799706009: C语言中,字符常量不是char类型吗?《程序员入门必备》这本书中,有一段论述让我思维混乱了,原文如下: -
望梁全威: 这书别看了……讲得忒乱.C语言入门推荐看《C和指针》或者《Linux C编程一站式学习》.实在不行看谭浩强的《C程...

瑞安市18799706009: C语言编程里没加"include <stdio.h>"怎么也可以执行printf语句呢 -
望梁全威: 早期的C语言并不要求对你所调用的函数进行声明,所有函数的调用都是由程序员自己保证调用正确性的.这种方式下虽然编译器不知道你调用的函数到底是哪个,但进行连接时可以由连接器找到这个函数的具体位置.但如果调用不正确,那么程序就危险了.后来C在90年标准化后,要求对所有调用的函数都进行其原型声明,这是从C++中借鉴过来的.C语言中说,不指明类型就默认为int,而不指明函数参数就是随便什么参数.这对printf来说还算合适.但对符合C标准的程序来说,还是要提供声明以便进行调用的语法检查才好.stdio.h中包含了printf函数的声明.现代C语言实现都要求原型声明.但TC太老了,它主要还是要考虑与更古老的C语言兼容的问题.所以你这样也可以.

瑞安市18799706009: c语言一道小题 -
望梁全威: 你在使用输入函数scanf()时,参数的对应方式不对啊!可以改成这样:#include"stdio.h" main() {float a1,b1,a2,b2; float a,b; char i; printf("请输入第一个复数:"); scanf("%...

瑞安市18799706009: 关于c语言中的赋值问题. -
望梁全威: 你的意思是想给整个数组赋值,且为c是吗?可以是可以!但是不能写成a[5]='a'正确的写法应该是:char a[5]="a";或char a[5]={'c'};简单的说一下:这里a是一个字符...

瑞安市18799706009: C语言的知识点有哪些? -
望梁全威: 最低0.27元/天开通百度文库会员,可在文库查看完整内容>原发布者:ofhyeiu2C语言最重要的知识点总体上必须清楚的:1)程序结构是三种:顺序结构、选择结构(分支结构)、循环结构.2)读程序都要从main()入口,然后从最上面顺...

瑞安市18799706009: C语言:这段程序没有错误但是为什么不能输出东西呢? -
望梁全威: 楼主这是没有停止的原因,你在最后添上 getch();就能看到结果是,其实printf是打出东西了,不过是因为一闪而过你看不到而已

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