| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1774 人关注过本帖
标题:问一个关于结构、文件、指针的问题
只看楼主 加入收藏
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:21 
问一个关于结构、文件、指针的问题
请帮忙编一个程序,是这样的:
结构student里包括name、number、grade、mark四个。
如果一共有5组数据分别是{wang,23,78,great}  {li,12,56,bad}  {liu,33,67,good}  {xu,26,89,great}  {miao,32,76,great}

要求查询者输入name,然后屏幕上显示该name所在结构的mark部分
谢谢大神~
搜索更多相关主题的帖子: number 
2016-08-31 22:09
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
虽然给你编出来了,不过建议以后还是要自己先动手。
#include <stdio.h>
#include <string.h>
main()
{
    struct stu
    {
        char name[20];
        int number;
        int grade;
        char mark[10];
    }student[5]={
    {"wang",23,78,"great"},
    {"li",12,56,"bad"},
    {"liu",33,6,"good"},
    {"xu",26,89,"great"},
    {"miao",32,76,"great"}};
    int i,n=5;
    char name1[20];
    scanf("%s",name1);
    for(i=0;i<5;i++)
    {
       if(!strcmp(name1,student[i].name))
       {
           n=i;
           break;
           }   
    }
    if(n!=5)
    printf("%s\'s mark is %s.",student[n].name,student[n].mark);
    getchar();
}
2016-08-31 22:32
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 2楼 ehszt
if(!strcmp(name1,student[i].name))
这句是什么意思啊,可不可以用
if(strcmp(name1,student[i].name)==0)和while(1)结合起来的?

还有 getchar()的用法,我有些不太明白

[此贴子已经被作者于2016-8-31 23:38编辑过]

2016-08-31 23:10
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:7 
回复 3楼 惧惧
strcmp(name1,student[i].name)相同就返回0,那么非0就是真,当name1与student[i].name相同就能执行了。
这里的getchar()起到暂停的作用。
2016-09-01 00:16
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 4楼 linlulu001
那如果要查询的出现了两次,且要把这两次都显示出来怎么办呀?
2016-09-01 09:12
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 

 for(i=0;i<5;i++)            
    {
       if(!strcmp(name1,student[i].name))            //有多句的或者说你想遍历数据,将if里面的代码修改下就行了。
       {
            printf("%s\'s mark is %s.",student[n].name,student[n].mark);
          // n=i;        
           //break;                           
           }   
    }
 if(n==5)        //找不到匹配的数据时,可以用n==5输出提示。
2016-09-01 09:27
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 6楼 linlulu001
n=i和break还是要用到的吧。不然就不知道n 是几了
2016-09-01 09:54
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 7楼 惧惧
如果想多次输入,试试下面这个,不输入任何数按两次回车退出
#include <stdio.h>
#include <string.h>
main()
{
    struct stu
    {
        char name[20];
        int number;
        int grade;
        char mark[10];
    }student[5]={
    {"wang",23,78,"great"},
    {"li",12,56,"bad"},
    {"liu",33,6,"good"},
    {"xu",26,89,"great"},
    {"miao",32,76,"great"}};
    int i,n;
    char name1[20];
    while(gets(name1)&&name1[0]!='\0')
    {
        n=5;
        
    for(i=0;i<5;i++)
    {
       if(!strcmp(name1,student[i].name))
       {
           n=i;
           break;
           }   
    }
    if(n!=5)
    printf("%s\'s mark is %s\n",student[n].name,student[n].mark);
    else
    printf("%s does not exist.\n",name1);
    }
    getchar();
}
2016-09-01 10:20
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 7楼 惧惧
把n改成i就行了。
2016-09-01 11:10
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 9楼 linlulu001
;
}[/code]

[此贴子已经被作者于2016-9-2 14:39编辑过]

2016-09-01 12:17
快速回复:问一个关于结构、文件、指针的问题
数据加载中...
 
   



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

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