| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1031 人关注过本帖
标题:请问一下 gets(---) 和scanf(“%s”,------)的区别 这个是怎么回 ...
只看楼主 加入收藏
lwlls668
Rank: 2
等 级:论坛游民
帖 子:59
专家分:72
注 册:2010-4-9
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:7 
请问一下 gets(---) 和scanf(“%s”,------)的区别 这个是怎么回事??
#include <string.h>
#include <stdio.h>
#include<stdlib.h>
struct student
{
    char ming[20];
    int shu,yu,ying;
    student *next;
};
main()
{
    student *p,*x,*head;
    x=(student*)malloc(sizeof(student));
    printf("\n 名字 :");
    gets(x->ming);
    printf("\n 数学成绩 :");
    scanf("%d",&x->shu);
    printf("\n 语文成绩:");
    scanf("%d",&x->yu);
    printf("\n 英语成绩:");
    scanf("%d",&x->ying);
    x->next=NULL;
    head=p=x;
    while (x->ming!="000")

    {
        x=(student*)malloc(sizeof(student));
        printf("\n 名字 :");
        scanf("%s",p->ming);
        printf("\n 数学成绩 :");
        scanf("%d",&x->shu);
        printf("\n 语文成绩:");
        scanf("%d",&x->yu);
        printf("\n 英语成绩:");
        scanf("%d",&x->ying);
        p->next=x;
        x=p;
        }
}
这是一道简单的 链表题。

这儿我有两个问题请教一下大家:1:在用 红色 和蓝色 标示出来的 gets() 和 scanf()  这两个不能随意使用  不然有可能 会不能多次输入“名字”(你可以试一试把scanf()换成gets()试一试)。 这是为什么呢?
  2:绿色标出的while()的循环条件中 这样是行不通的,你试一试 会发现 它结束不了循环  改为(x->shu!=-1||x->ying!=-1||x->yu!=-1)之类的就可以。但我就是想要用 名字来判断,比如说输入到名字为数字0或000时候结束循环   这该怎么弄  ?为什么要这样呢??

非常感谢!!
搜索更多相关主题的帖子: gets scanf 
2010-09-18 17:29
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的

scanf函数 %s 读入一个非空白字符序列,可以有长度限制。读入后在字符数组的最后加空字符'\0'(做成字符串)。作为参数的字符数组应当足够存放读入的所有字符和结尾的'\0'


楼主分析下你的输入,看上面的解释是否能解决你的问题???

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-09-18 19:24
lwlls668
Rank: 2
等 级:论坛游民
帖 子:59
专家分:72
注 册:2010-4-9
收藏
得分:0 
回复 2楼 jack10141
     你为什么不实践抄做一遍再说呢···     
2010-09-18 19:27
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:50 
scanf输入对最后的“enter”没有从输入缓冲中清除,所以换成gets相当于输入的空字符串
你可以这样替换scanf:
        getchar();
        gets(p->ming);

效果将会是一样的!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-09-18 19:38
lwlls668
Rank: 2
等 级:论坛游民
帖 子:59
专家分:72
注 册:2010-4-9
收藏
得分:0 
怎么没人回答我的第二个问题吗    那50分都给他了勒
2010-09-19 20:26
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
......................第二个问题没时间去看呢!!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-09-20 22:40
tonyzhu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-23
收藏
得分:0 
楼主有才~~~~~~~~~~~·
2010-09-23 10:52
lwlls668
Rank: 2
等 级:论坛游民
帖 子:59
专家分:72
注 册:2010-4-9
收藏
得分:0 
:-C   不知道还有strcmp 这个函数比较字符串···
2010-11-15 16:07
快速回复:请问一下 gets(---) 和scanf(“%s”,------)的区别 这个是怎 ...
数据加载中...
 
   



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

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