求帮忙解答?

l494777520 2014-07-18 04:49:50
char c;

do
{
printf("运行程序?【Y \ N】");
scanf("%c", &c);
for(int i=1; i<INT_MAX; ++i)
{
if(c == 'Y'||'y')
break;
else if(c == 'N'||'n')
return 0;
else;
}
}
while(c == 'y');

return 0;


这个语句为什么不能从复执行?
...全文
64 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-07-18
  • 打赏
  • 举报
回复
要把scanf写在循环里面。
Intel0011 2014-07-18
  • 打赏
  • 举报
回复
你的程序执行时,输入y,接着按Enter键 y被scanf读取放入c中,完成一次循环 第二次循环时,Enter键值被scanf读取放入c中,按你程序的逻辑,for循环结束后,while(c == 'y');中的判断不成立,main正常结束
scanf("%c", &c);
  //标准中根本没有定义 fflush(stdin)。MSDN 文档里也清楚地写着fflush on input stream is an extension to the C standard(fflush 操作输入流是对 C 标准的扩充)。当然,如果你毫不在乎程序的移植性,用 fflush(stdin) 也没什么大问题。
     
   //fflush(stdin); 
    {
            int a;
                /* 通过 while 循环把输入流中的余留数据“吃”掉 */
                while ( (a = getchar()) != '\n' && a != EOF ) ;
               
      }

      for(i=1; i<12; ++i)
      {
         if(c == 'Y'||'y')
            break;
         else if(c == 'N'||'n')
            return 0;
         else;
      }
赵4老师 2014-07-18
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧