标题:问一个关于结构、文件、指针的问题
只看楼主
惧惧
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
帖 子:1728
专家分: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
帖 子:1728
专家分: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468338-1-1.html




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

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