| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 340 人关注过本帖
标题:一个小问题,高手不用理会
只看楼主 加入收藏
zxiq_to
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2012-8-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
一个小问题,高手不用理会
#include<stdio.h>

struct {
       char mm[90];
       }xx[90];
int main()
{
    int n=3,i,j;
    /*scanf("%d",&n);*/
    for(i=0;i<n;i++)
      gets(xx[i].mm);
    for(i=0;i<n;i++)
      printf("%s\n",xx[i].mm);
    getch();
    return 0;
}
为什么把/*scanf("%d",&n);*/
改为运行语句并且输入3后
运行会不一样呢?
可能是scanf语句与gets语句相冲突吧,谁能告诉我
这是什么回事,怎么解决?
2012-09-30 09:54
zxiq_to
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2012-8-18
收藏
得分:0 
怎么没人啊
2012-09-30 10:18
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:20 
回复 楼主 zxiq_to
那是因为你通过  scanf("%d",n) 输入3回车后的换行符被gets(xx[0].mm)接收,所以再通过printf打印出来有三个字符,只不过其中有个换行符,你看不到而已。
2012-09-30 10:36
zxiq_to
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2012-8-18
收藏
得分:0 
谢谢解答不过我在网站上找到了

scanf与gets函数混用  2007-08-04 20:25:54|  分类: 知识点集 |  标签: |字号大中小 订阅 .

利用scanf函数从键盘接收一字符(或整数)时,它只读入字符(或整数)本身,而把字符(或整数)后的回车符留在输入缓冲区内;gets函数从标准的输入读取,如果使用gets函数给字符数组输入字符串时,字符数组不能指定长度,因为,只要字符数组的长度小于gets函数读取的行缓存的大小,即使你输入的字符数大于你所规定的字符数组的长度,gets函数也会接收所输入的全部字符,造成字符数组越界。因此,gets是一个不推荐使用的函数。一般对于初学者来说,容易把scanf和gets函数混用,出现一些问题,有下面两种情况:

1、gets在scanf前调用,这种调用一般不会出现什么问题,可以正常输入。

2、scanf在gets前调用,这种情况就会出现问题,当输入完scanf中的变量时,运行到gets函数,则不让输入任何字符,出现此问题的原因是gets函数接收了scanf输入完后的回车符,解决的办法是在scanf和gets中间,用getchar函数接收掉回车符,这样就不会出现任何问题了。代码如下:

char S[100];

char a;

scanf("%c",&a);

getchar();

gets(S);

摘自http://blog.
2012-09-30 10:40
q13678986740
Rank: 4
等 级:业余侠客
帖 子:114
专家分:245
注 册:2012-7-7
收藏
得分:0 
学习了
2012-09-30 13:25
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:0 
自己会解决问题,最好不过
2012-10-01 00:37
胡振杰
Rank: 2
等 级:论坛游民
帖 子:41
专家分:63
注 册:2012-9-14
收藏
得分:0 
靠自己
2012-10-01 04:43
快速回复:一个小问题,高手不用理会
数据加载中...
 
   



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

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