C语言scanf函数类库问题和scanf接收问题

C语言中使用scanf()函数常见问题解析_论文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言中使用scanf()函数常见问题解析
中国最大最早的专业内容网站|
总评分0.0|
&&提出了c语言中的scanf()函数在使用过程中的常见问题,分析了问题产生的原因并提出了解决方法,例如scanf()函数控制串的使用及相关问题等,重点阐明了利用scanf()函数输入多维数组时遇到问题应如何解决。
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢c语言中连续使用两个scanf的问题
我的图书馆
c语言中连续使用两个scanf的问题
#include &stdio.h&int main (void){&int a,&puts ("请输入一个整数");&scanf ("%d", &a);&puts ("再输入一个整数");&scanf ("%d", &b);&printf ("a = %d b = %d\n", a, b);
#include &stdio.h&
int main (void)
char c1, c2;&puts ("请输入一个字符");&scanf ("%c", &c1);&puts ("再输入一个字符");&scanf ("%c", &c2);&printf ("c1 = %c c2 = %c\n", c1, c2);&return 0;
现在我说说问题出在哪里,要说明的是程序一是没问题,有问题的是程序二
在程序二中,比如你输入一个字符j, 它会打印 c1 = j c2 = ,也就是说执行第二scanf
的时候它没提示你输入一个字符,原因是这样的:在C语言中,如果使用字符型变量(就是char型)时在有连续输入的情况下,很容易因为出现垃圾字符而导致程序的流程非法。也就是c2存储了c1中没有存储的一个回车符号.c1没有接受回车符,这个符号存储在输入缓存中,当执行到第二个scanf的时候这个回车符就赋给了c2.所有程序没有提示你输入字符.
问题和原因说完了,现在说说解决的方法,方法有三个,可能有更多,而我不知道的,你可以自己思考一下
把第一个scanf 改成 scanf ("%c\n", &c1);
在第一个scanf 后添加下面的语句
fflush (stdin);
&在puts ("再输入一个字符");语句下面添加下面的语句
while (getchar () != '\n');
喜欢该文的人也喜欢10:09 提问
c语言中scanf()读取值的问题
int get_int(void)
while (scanf("%d", &input) != 1)
while ((ch=getchar()) != '\n')
putchar(ch);
printf("is not an interger.\nPlease enter an");
printf("interger value,such as 25,-178 or3:");
输入里面的a为什么在scanf获取值进入while判断,满足进入循环的条件后,还在缓冲区中,可以继续被getchar()获取 ?按说不是应该被取过的值就不在缓冲区了吗?
按赞数排序
我猜测是scanf发现类型不对就没有去把它取出来
我觉得是scanf读取整数时发现字符a不合法(这个时候scanf的返回值是0),但是由于a不是整型,于是scanf忽略了它。因此a还在缓冲区内,所以成立你说的情况了。
scanf,按用户指定的格式从键盘上把数据输入到指定的变量之中
scanf()函数返回成功赋值的数据项数
由于'a'读取不能转成%d,所以返回0,0!=1,接着ch='a',接着输出‘a’,接着有一个换行,==‘\n’,退出while打印printf
应该是scanf没有读到有效数据,数据被忽略了,所以之后还能读到。
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐C语言中scanf的问题,请各路高手不吝赐教_百度知道
C语言中scanf的问题,请各路高手不吝赐教
我建立了一个一维数组,用scanf输入值,有两个问题:第一是如何只准输入大括号和小括号即[]();第二是如何可以输入多组数据并分开保存?比如说我要一次分别输入三组数据,如何让着三组数据分开保存?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
第一个问题,scanf不可能控制只允许输入什么不允许输入什么,它只能在输入结束后判断输入是否合乎格式。第二个问题,方法很多,比如你是int数组,那么每个数据之间用空格或者回车分开就可以实现分别保存了。
请问老师:实现分别保存后我改如何调用保存的数据呢?比如我用scanf(“%c”,num);输入一组数据后点击回车后scanf就结束了,假设scanf没有结束它又接收了第二组数据,那么我如何调用第二组数据?
你要接收的一维数组是什么数据类型?如果是字符数组,也可以看做字符串,这个是最方便的,scanf可以通过字符串的方式一次全部接收。char&num[200];scanf(&%s&,num);这样你连续输入(比如:adbcdefisjdnsijflj 这样)就一次接收了。如果是int这样的整形数组,那么就需要一个一个接收了:int&num[30];int&i=0;for(i=0;i&10;i++)&&scanf(&%d&%d&%d&,&num[i*3],&num[i*3+1],&num[i*3+2]);&&//注意地址符&,你追问中就缺少了地址符,只有指针不需要这个(比如上面的char数组)&&//这样一次接收三个,通过空格分隔,演示的其实主要是分割输入&&//其实这样的效果和下面一段是完全等效的,你可以分开测试&&for(i=0;i&30;i++)&&scanf(&%d&,&num[i]);这两种方式,只要你每个数直接用空格或者回车分开,就会分开接收了。
采纳率:85%
为您推荐:
其他类似问题
scanf的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言中scanf()和用gets()接收字符串的区别_百度经验
&&&&&&&&&电脑软件C语言中scanf()和用gets()接收字符串的区别听语音1234567
百度经验:jingyan.baidu.com& & & &初学者在编写C语言代码时,时常会困惑用scanf()和gets()接收字符串的区别。gets()的功能完全可以用scanf()来实现,都用scanf()不行吗?百度经验:jingyan.baidu.com1区别1:scanf()可以同时接受多个字符串,而gets()一次只能接受一个字符串。2区别2:scanf()可以不能接受带空格的字符串,而gets()能接受带空格的字符串。3区别3:scanf()不能接受长度为0的字符串,会自动忽略开头的所有空格,并且以空格、换行符、回车结束输入。而gets()能接受长度为0的字符串,不会自动忽略开头的所有空格或回车,并以回车结束。END经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(4)已投票(4)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验011011热门杂志第1期你不知道的iPad技巧3811次分享第1期win7电脑那些事6662次分享第2期新人玩转百度经验1422次分享第1期Win8.1实用小技巧2667次分享第1期小白装大神1950次分享◆请扫描分享到朋友圈

我要回帖

更多关于 C语言中if(a) 的文章

 

随机推荐