免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1794 | 回复: 7
打印 上一主题 下一主题

请教C关于gets的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-22 09:53 |只看该作者 |倒序浏览
本帖最后由 ilikerome 于 2012-03-22 10:22 编辑

代码见最下面。
功能:1、从终端得到两个字符串,比较大小;
      2、一次比较结束以后询问是否继续,供操作者选择;

我的问题:1、第一次运行exe,提示输入数组a的内容,如下图,ok。

              2、接着输入数组b的内容,如下图,ok。

              3、比较结果出来了,提示选择是否继续,输入Y,继续。如下图。

             4、问题就在这一步,输入Y并回车以后,并没有回到步骤1---输入数组a,而是直接打印出
             please input array a:
             please input array b:
             光标停在b这里,数组a没法输入啊,如下图。


请各位指点是为什么?
谢谢!
              


#include <stdio.h>

int main()
{
        char a[80];
        char b[40];
        int i;
        char c;
        int flag;
        flag=1;

        while(flag==1)
        {
                i=0;

                printf("\nplease input array a:");
                gets(a);

                printf("\nplease input array b:");
                gets(b);

                while(a!='\0'&&a==b)
                        i++;
                printf("the result is %d\n",a-b);

                printf("继续吗?");
                c=getchar();
                if(c=='n'||c=='N')
                        flag=0;
        }

}

论坛徽章:
0
2 [报告]
发表于 2012-03-22 10:18 |只看该作者
回复 1# ilikerome

代码中没看到有scanf()啊


   

论坛徽章:
0
3 [报告]
发表于 2012-03-22 10:22 |只看该作者
c=getchar()读了'y'但没读回车 于是a=="\n"

论坛徽章:
0
4 [报告]
发表于 2012-03-22 10:24 |只看该作者
KBTiller 发表于 2012-03-22 10:18
回复 1# ilikerome

代码中没看到有scanf()啊


不好意思,写错了,是gets,谢谢指出。

论坛徽章:
0
5 [报告]
发表于 2012-03-22 10:46 |只看该作者
回复 3# hbmhalley

请问怎么解决这个问题?想了半天也不知道怎么办。


   

论坛徽章:
0
6 [报告]
发表于 2012-03-22 10:50 |只看该作者
ilikerome 发表于 2012-03-22 10:24
不好意思,写错了,是gets,谢谢指出。



  c=getchar();
后面加一句
   while( getchar() != '\n' )
         ;
就可以了


不过代码的其他毛病似乎还不少

论坛徽章:
0
7 [报告]
发表于 2012-03-22 10:53 |只看该作者
回复 5# ilikerome


    c=getchar();getchar();

论坛徽章:
0
8 [报告]
发表于 2012-03-22 11:16 |只看该作者
两位的都可以,原理我也明白了,非常感谢。
#include <stdio.h>

int main()
{
        char a[80];
        char b[40];
        int i;
        char c;
        int flag;
        flag=1;

        while(flag==1)
        {
                i=0;

                printf("\nplease input array a:");
                gets(a);

                printf("\nplease input array b:");
                gets(b);

                while(a[i]!='\0'&&a[i]==b[i])
                        i++;
                printf("the result is %d\n",a[i]-b[i]);

                printf("继续吗?");
                c=getchar();
                                //getchar();

                                while(getchar()!='\n')
                                        ;
                if(c=='n'||c=='N')
                        flag=0;
        }

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP