c语言的scanf scanf里面为什么只有按回车才能出结果?

【图片】请问scanf在某些情况下会出现跳过的问题吗?【c语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:557,130贴子:
请问scanf在某些情况下会出现跳过的问题吗?收藏
大家好,我是初学者,目前代码如下,本来是应该要用户输入尺寸和图形的结果gcc编译后运行发现输入图形那里被略过去了……为了谨慎起见,我把scanf字符的那段单独写了一下编译后发现运行无误……请问这是为什么呢?难道scanf在某些情况下会被跳过吗?烦请个位朋友指点一下,谢谢!
找c语言?来博为峰学C语言开发,C语言开发课程,免费训练营火热开启中!找c语言?来这里学C语言开发,抢!!!C语言开发课程试听名额,总监名师主讲.
在gedit写的代码?vi vim gvim 都试了,还是觉得vi 和gedit好用。遇到过这种情况,加getchar()?我也不确定。。
C++里,针对输入流,读取整行字符串时,如果此时输入流的下一个字符为换行符,则将换行符本身作为一行直接读取,不知道C是不是也是这样。如果是,那第一次输入时所按下的回车也就是换行符还在输入流里,这样读取不成功也就可以说的通了,但,具体在C里是不是这个原因我也不敢乱说。但如果是,楼上的解决方法就可以解决此问题。
输入缓冲区?
登录百度帐号推荐应用欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 3043 人关注过本帖
标题:从大程序取出的一段for循环里scanf函数被跳过的问题,这被跳过后无法判断, ...
等 级:新手上路
帖 子:12
结帖率:100%
&&已结贴√
&&问题点数:20&&回复次数:8&&&
从大程序取出的一段for循环里scanf函数被跳过的问题,这被跳过后无法判断,后续程序就没法运行了
#include&stdio.h&
#include&ctype.h&
#include&stdlib.h&
void main()
&&& char test='\0';
&&& for( ; ; )
&&&&&&&&printf(&\ndo you&&want to enter details of a horse (Y or N)?&);
&&&&&&&&scanf(&%c&,&test);
&&&&&&&&if(tolower(test)=='n')
&&&&&&&&{printf(&\ntest2&);
&&&&&&&&&&&&
不知道为什么出现出现了两次printf(&\ndo you&&want to enter details of a horse (Y or N)?&)
我想的是运行一次printf,对scanf输入字符判断一次
有什么问题吗,如何解决。最近在学作为结构成员的指向结构的指针,上面这段是案例大程序里的一个小段,这个片段没运行好,后续程序也没法运行.不上大程序的原因是怕各位麻烦,我自己也找出是那个地方有问题,但是不知道原因和解决方法.
附件: 您没有浏览附件的权限,请
搜索更多相关主题的帖子:
等 级:侠之大者
帖 子:283
专家分:436
[ 本帖最后由 lwb 于
13:01 编辑 ]
自由、民主、宪政!
等 级:蝙蝠侠
帖 子:196
专家分:965
写成这样吧scanf(&%c%c&,&test);
因为你输入了y还输入了回车
等 级:蝙蝠侠
帖 子:196
专家分:965
贴错了 scanf(&%c%c&,&test,%enter);
等 级:蝙蝠侠
帖 子:196
专家分:965
&&得分:10&
我郁闷 再次2
scanf(&%c%c&,&test,&enter);
等 级:侠之大者
帖 子:283
专家分:436
[quote]以下是引用lwb在 11:18:43的发言:
[ 本帖最后由 lwb 于
13:00 编辑 ]
自由、民主、宪政!
等 级:侠之大者
帖 子:283
专家分:436
&&得分:10&
程序代码:#include&stdio.h&
#include&ctype.h&
#include&stdlib.h&
int main(int argc, char *argv[])
&&& char test='<font color=#';
&&& for( ; ; ) {
&&&&&&&&printf(&\ndo you&&want to enter details of a horse (Y or N)?&);
&&&&&&&&scanf(&%c&,&test);
&&&&&&&&while(getchar() != '\n');
&&&&&&&&if(tolower(test)=='n') {
&&&&&&&&&&&&printf(&\ntest2&);
&&&&&&&&&&&&break;
&&& return <font color=#;
找到答案&&&
原因如下&&scanf函数&&只读取一个字符&&实际上缓冲区还留下了 回车&&字符&&&作为下一次的字符 继续 输入&&吃掉回车 就行了&&& 代码如上
自由、民主、宪政!
等 级:新手上路
帖 子:12
回复 5楼 jk_love
谢谢,明白了,因为要求输入的是字符,所以,打的enter也作为字符被吃掉了。
等 级:新手上路
帖 子:12
回复 7楼 lwb
谢谢帮助,我明白了,原因也晓得。你的方法很好,我很受用.
版权所有,并保留所有权利。
Powered by , Processed in 0.066650 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reservedint i,a[10];
for(i=0;i&10;i&#43;&#43;)
scanf(&%d&,&a[i]);
输入一个数字再按空&#26684;会继续读入数字,如果输入的数据不足10个,怎么让它在输入完毕后按回车自动跳出循环?
#include&stdio.h&
#include&stdlib.h&
int main()
int i,a[10];
for(i=0;i&10;&#43;&#43;i)
scanf(&%d%c&,a&#43;i,&c);
printf(&%d\n&,a[i]);
if(c=='\n')
/question/.html
本文已收录于以下专栏:
相关文章推荐
for中使用scanf,让scanf终止的条件应该有很多,这里用回车结束输入
int i,a[100],c=0;
for (i=0;i...
自己是个新手,写一些程序供初学者和新手方便使用。
C语言输入一串数据到数组中,用空格隔开回车结束...
桶排序程序“`
/**************************************************************/
/* 桶排序程序
/* 在输入终止时遇到了问题 ...
先看下面这段程序
int main()
char b[100];
printf("Please input the number:\...
实际问题:很多读入数据都希望用回车来结束,比如输入一串double(输入时用空格隔开),存入到一个vector或数组中,最后用回车结束(关键是个数不限,所以不能用固定循环次数来限定它。
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
① 遇空格、“回车”、“跳格...
问题来源/question/.html?oldq=1#reply-box-
void main(...
在用c语言编写输入语句的时候常用到scanf函数,初学者在刚用scanf函数输入时,经常会遇到各种各样的输入错误,最重要的是一定要记住scanf函数的输入格式,scanf函数里包含了哪些东西,输入的时...
C语言,以空格为分割,以回车为结束标记,输入一串数字到一个int数组中
程序时对scanf在键盘缓冲区留下的字符有疑问,思考不果。看了百度百科上的scanf词条,说scanf输入遇到空格、跳格、回车才会从缓冲区往变量送字符。于是自己写了以下几个程序思考,还是不果。
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)27被浏览10277分享邀请回答scanf("%s\n%s");
效果等同于scanf("%s",a);
scanf("%s",b);
输出函数均为:
printf("%s\n", a);
printf("%s\n", b);
所以,你可以暂时认为\n在这里的作用就是作为标志,区分两个字符串.并没有写入a,b中.而对于scanf("%s", a);
ch = getchar();
scanf("%s", b);
显然所有stdin输入都可以作为getchar所需的输入,自然\n也是可以的.
//----------------------------------------------------------------------那么,接着说输入字符的事情.这次,我们输入的是a回车b回车依然是上面那个,不过改成了scanf("%c", &ch1);
scanf("%c", &ch2);
输出函数为:
printf("%c\n", ch1);
printf("%c\n", ch2);
结果是什么呢?可以先猜猜看.结果是:a回车你可能质疑为什么会这样,那么不妨设:scanf("%c\n%c",&ch1,&ch2);
输出函数不变.这回结果对了吧?现在问题很明显,就是%s和%c的问题,简单分析可知:对于scanf函数,需求%s类型时,\n是不会影响scanf内容的对于需求%c类型时,\n也是字符,自然会有影响.//---------------------------------------------对于你说的缓冲区什么的,不妨试试下面的程序.输入a回车b回车while(1)
//TODO:刚才的代码.
e.g.while (1)
char ch,ch1,ch2;
scanf("%c", &ch1);
ch = getchar();
scanf("%c", &ch2);
printf("%c\n", ch1);
printf("%c\n", ch2);
printf("----------------\n");
你试试看有什么效果?这就是你说的缓冲区的问题.提示:如果不明白给程序打断点,看看就明白了.这就是在你遇见问题,分析问题的一些思路.还有就是不能急躁.自己初学说不明白,描述不清晰就别动不动怀疑别人懂不懂.祝你更进一步.以上.134 条评论分享收藏感谢收起3添加评论分享收藏感谢收起查看更多回答12:38 提问
请问这代码有错吗?为什么我输入一个字符然后按回车,程序就停止运行了?
void chline(char, int, int);
int main()
printf("Please enter an character:\n");
scanf_s("%c", &ch);
printf("Please enter two integers:\n");
scanf_s("%d%d", &n, &m);
chline(ch, n, m);
void chline(char ch, int n, int m)
for (i = 1; i &= i++)
printf(" ");
for (; i&= i++)
printf("%c",ch);
printf("\n");
按赞数排序
不知道你用的是哪个版本?我用vc2010运行没有问题。
你试试这个:
scanf_s("%c", &ch,sizeof(ch));
我用codeblock
return 前加个getchar()
两个%d之间加一个“,”号,输入的时候也加逗号
其他相关推荐

我要回帖

更多关于 c语言中scanf的用法 的文章

 

随机推荐