| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 362 人关注过本帖
标题:为什么出现这情况?? 求高手指点
只看楼主 加入收藏
jue306
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-11-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
为什么出现这情况?? 求高手指点
#include<stdio.h>
void main()
{
int i;
int num[10];
char name[10][20];

    for(i=0;i<10;i++)
    {
        printf("please input a name\n");
        gets(name[i]);
        printf("please input a num\t");
        scanf("%d",&num[i]);
    }
}
按照逻辑,这里应该每次都是提示please input a name,然后从键盘输入一个名字,敲回车,在提示,please input a num在输入一个数字,按回车。在此提示please input a name.......依次重复10此,从而输入10人的姓名和年龄。
    结果运行程序,问题出来了:是这样的 第一次是 please input a name 然后输入:xiaoli,再次显示,please input a num,输入 3,按回车,下次就是这样的:
please input a name:
please input a num:
    这个是为什么呢?求高手指点!
搜索更多相关主题的帖子: 运行程序 include please 键盘 姓名 
2013-11-23 22:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
如果你不清楚是gets()引起問題還是scanf()引起問題,就試著把代碼裁減掉僅僅是gets()或scanf()測試看看是哪個出現你所說的問題。這是在高中就學過的分離變量研究法,讀書不是白讀的。寫程序代碼不會增刪裁減,不如不學。

授人以渔,不授人以鱼。
2013-11-23 22:48
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:4 
是gets()问题,可以确定,具体原因,不太清楚,但可以换一种输入,
scanf("%s",name[i]);
这个是可以的,你试试吧

编写的程序,不能改变世界,却可以改变自己...
2013-11-23 23:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用loveClangage在2013-11-23 23:02:32的发言:

是gets()问题,可以确定,具体原因,不太清楚,但可以换一种输入,
scanf("%s",name);
这个是可以的,你试试吧

你要用scanf(),如果他的name字符串有空格怎麼辦?中文姓名沒有,英文姓名空格多了。假定姓名從來沒有空格?

授人以渔,不授人以鱼。
2013-11-23 23:10
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:4 
#include<stdio.h>
 void main()
 {
 int i;
 int num[10];
 char name[10][20];

     for(i=0;i<10;i++)
     {
         printf("please input a name\n");
         gets(name[i]);
         printf("please input a num\t");
         scanf("%d",&num[i]);
         getchar();
     }
楼主试试。
 }

好好学习,天天想上
2013-11-23 23:56
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:4 
  遇到过好多这种问题了  缓冲区的清空问题   
本程序中具体问题是输入数字后按下的“回车键”当做字符(串)键入了下一个字符数组里了

#include<stdio.h>
void main()
{
int i;
int num[10];
char name[10][20];

    for(i=0;i<10;i++)
    {
        printf("please input a name\n");
        gets(name[i]);
        printf("please input a num\t");
        scanf("%d",&num[i]);
       fflush(stdin);      //加一句这个或者 getchar(); 也行   ,作用是清空缓冲区
    }
}

三十年河东,三十年河西,莫欺少年穷!
2013-11-24 00:45
lvnian
Rank: 2
等 级:论坛游民
帖 子:10
专家分:12
注 册:2013-10-2
收藏
得分:4 
是个gets()问题,在你输入数字后,敲下的回车键会被gets()当做字符串输入,然后结束gets();执行下面的 printf("please input a num\t");
2013-11-24 00:46
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:4 
6     7楼正解

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-11-24 10:15
快速回复:为什么出现这情况?? 求高手指点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015353 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved