智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2608|回复: 5
打印 上一主题 下一主题

[调试类] 华为机考题,为何scanf总要多输一次【附很短的问题代码】

[复制链接]

16

主题

211

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5525
威望
2875
贡献
1932
兑换币
1894
注册时间
2013-7-23
在线时间
359 小时
毕业学校
华中科技大学
跳转到指定楼层
1#
发表于 2015-8-2 20:16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
机考题及相应的样例输入输出如下,为何在输入取结果指令getVoteResult后,还要再输入一点什么再按回车才能输出结果

代码:
#include<stdio.h>
#include <string.h>
#include<math.h>
main()
{
        int count_people=0,j=0,k=0,i=0,finish=0;
        int vote_a=0,vote_b=0,vote_c=0,vote_d=0,vote_e=0,vote_f=0;
        char s1[15]={"addCandidate"};
        char s2[15]={"vote"};
        char s3[15]={"getVoteResult"};
        char a[15],b[15];
    scanf("%s %s",&a,&b);

        while(finish==0)
        {
                if(finish==1) break;
        if(strcmp(a,s3)!=0)  
        {
                    if(strcmp(a,s1)==0)  {count_people++;}
                if(strcmp(a,s2)==0)  
                {
                        if(b[2]==49) vote_a++;
                        if(b[2]==50) vote_b++;
                        if(b[2]==51) vote_c++;
                        if(b[2]==52) vote_d++;
                        if(b[2]==53) vote_e++;
                }
                        for(k=0;k<15;k++)
                        {a[k]=0;b[k]=0;}
                        if(finish==0) {scanf("%s %s",&a,&b);}
        }
        else
        {
                printf("\nxx1=%d",vote_a);
                printf("\nxx2=%d",vote_b);
                printf("\nxx3=%d",vote_c);
                printf("\nxx4=%d",vote_d);
                printf("\nxx5=%d",vote_e);
                finish=1;break;
        }
        }

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

16

主题

211

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5525
威望
2875
贡献
1932
兑换币
1894
注册时间
2013-7-23
在线时间
359 小时
毕业学校
华中科技大学
推荐
 楼主| 发表于 2015-8-2 20:17:50 | 只看该作者
相应的测试环境为Visual C++ 6.0
回复 支持 0 反对 1

使用道具 举报

11

主题

288

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
8436
QQ
威望
3906
贡献
2886
兑换币
1902
注册时间
2009-12-28
在线时间
822 小时
3#
发表于 2015-8-2 21:26:11 | 只看该作者
问题出在scanf("%s %s",&a,&b);
你是考虑了 vote xx 这样的命令,可能因此用了两个%s来分别取字符?
但是最后一行命令getvoteresult没有空格,只能被scanf当做一个%s,因此才会需要再输入点什么才行

回复 支持 反对

使用道具 举报

9

主题

105

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3330
威望
1586
贡献
960
兑换币
1031
注册时间
2013-4-26
在线时间
392 小时
4#
发表于 2015-8-2 22:11:28 | 只看该作者
楼上正解,scanf("%s %s",&a,&b);拆成两句话就行了:scanf("%s",&a);scanf("%s",&b);
回复 支持 反对

使用道具 举报

2

主题

164

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2510
威望
1257
贡献
831
兑换币
838
注册时间
2015-4-25
在线时间
211 小时
毕业学校
Destiny
5#
发表于 2015-8-3 09:58:42 | 只看该作者
                          
回复 支持 反对

使用道具 举报

16

主题

211

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5525
威望
2875
贡献
1932
兑换币
1894
注册时间
2013-7-23
在线时间
359 小时
毕业学校
华中科技大学
6#
 楼主| 发表于 2015-8-3 20:05:53 | 只看该作者
xjtuzhanghongji 发表于 2015-8-2 21:26
问题出在scanf("%s %s",&a,&b);
你是考虑了 vote xx 这样的命令,可能因此用了两个%s来分别取字符?
但 ...

拜服 /膜拜
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 03:34 , Processed in 0.431151 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表