| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2254 人关注过本帖
标题:关于scanf中用%S输入字符串的问题!
只看楼主 加入收藏
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
收藏
已结贴  问题点数:20 回复次数:7 
关于scanf中用%S输入字符串的问题!
#include<stdio.h>

struct Student
{
    int num;
    char name[5];
    char sex;
    char adress[50];
    float grade;
};

int main()
{
    struct Student fun(struct Student,struct Student);
    struct Student stu[2];
    struct Student x;
    int i;
    for(i=0;i<2;i++)
    {
                //scanf("%d,%s,%c,%s,%f",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].adress,&stu[i].grade);    以此顺序输出grade会被adress覆盖掉

        scanf("%f,%d,%s,%c,%s",&stu[i].grade,&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].adress);  
                //我只能以这个顺序输出才能保证,adress中的数据不把grade覆盖,如果想按照结构体正常顺序输出应该如何处理????
        
    }
    puts("The information of Students are :");
    for(i=0;i<2;i++)
    {
        printf("%d %s %c %s %.1f",stu[i].num,stu[i].name,stu[i].sex,stu[i].adress,stu[i].grade);
        putchar('\n');
    }
    x=fun(stu[0],stu[1]);
    puts("The Winner is :");
    printf("%d %s %c %s %.1f",x.num,x.name,x.sex,x.adress,x.grade);
    putchar('\n');
    return 0;
}

struct Student fun(struct Student a,struct Student b)
{
    if(a.grade>b.grade)
        return a;
    else
        return b;
}

// 如果想按照结构体正常顺序输出应该如何处理????
搜索更多相关主题的帖子: include 字符串 
2015-04-08 21:45
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
scanf("%f,%d,%s,%c,%s",&stu[i].grade,&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].adress);  
还有一个问题就是name和adress本身就是数组,首地址已经代表了其地址,我再添加了一个&本应属于画蛇添足,为何却能正确运行!

既然还有不甘心
就还没到放弃的时候~
2015-04-08 21:50
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:20 
回答你第二个问题。

int arr[5];
这是我试验发现的: arr= = &a[0] = = &arr

但是,在<C与指针>一书中也提到:对一个数组名取地址是未定义的,不要这样做,即便它确实等于arr本身。

你醒了?快起来敲代码!!
2015-04-08 22:20
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
还有,对待结构体的时候,使用函数时,尽量避免传递一个结构体变量,这样会在函数调用时在函数内临时建立一个结构体变量的拷贝,

大大降低了效率,加大了开销。

最好是用结构体指针来处理结构体变量。

你醒了?快起来敲代码!!
2015-04-08 22:44
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
回到你的主要问题:

 //scanf("%d,%s,%c,%s,%f",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].adress,&stu[i].grade);    以此顺序输出grade会被adress覆盖掉
你这么写,数据之间在输入的时候是要加  , 隔开的因为你scanf里是这样安排的,但是

你输入adress信息时,比如:北京中关村,98

你的本意是adress是北京中关村,grade是88 但是 scanf不知道,它把   北京中关村,98 这个整体给了stu[i].adress

我建议你这样写:

printf("请分别输入.......各项数据之间用空格隔开\n");
scanf("%d  %s  %c  %s  %f",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].adress,&stu[i].grade);

你醒了?快起来敲代码!!
2015-04-08 22:50
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
scanf在接受字符串的时候,它会跳过最初的空白符,当它遇到一个非空白符的时候,他就开始收集字符,以此来拼凑字符串,一直到它再一次遇到空白符

的时候,他就认为字符串Over了 。也就是说 用scanf去接受字符串是基于获取连续的单词的

比如输入  [tab][space] the C programming language

 那么scanf获取额字符串是  "the"    前面的空白符跳过了,the后面遇到空格,就结束了。

你醒了?快起来敲代码!!
2015-04-08 23:01
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 3楼 code力力
thank you so much . bro

既然还有不甘心
就还没到放弃的时候~
2015-04-10 09:00
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
回复 7楼 S140131022
you are welcome

你醒了?快起来敲代码!!
2015-04-10 11:53
快速回复:关于scanf中用%S输入字符串的问题!
数据加载中...
 
   



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

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