鱼C论坛

 找回密码
 立即注册
查看: 1500|回复: 9

[已解决]结构体相关问题

[复制链接]
发表于 2021-1-4 17:19:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<string.h>
main()
{
        int i;
        char input[10];
        struct Student
        {
                char num[20];
                char name[20];
                char sex[10];
                int score;
        };
        struct Student student1={"MZ441426","Mike","Male",516};
        printf("该考生编号为:%s\n",student1.num);
        printf("请问您要查询什么?\n(输入name查询姓名,输入sex查询性别,输入score查询成绩,输入No或no停止查询。)\n");
        while(1)
        {
        scanf("%s",input);
        for (i=0;i>=0;i++)
        {
        if (strcmp(input,"name")==0)
           {printf("该考生姓名为%s\n接下来查询?\n",student1.name);break;}
        if (strcmp(input,"sex")==0)
           {printf("该考生性别为%s\n接下来查询?\n",student1.sex);break;}
        if(strcmp(input,"score")==0)
           {printf("该考生成绩为%d\n接下来查询?\n",student1.score);break;}
    }
    if(strcmp(input,"No")==0||strcmp(input,"no")==0)
           {printf("感谢您的使用!\n");break;}
    }
}




代码如上,是正确的,但是当我输入no时,要挺久才能打印出感谢您的使用这句话,请问是为啥,我用了两个编译器都是这样
最佳答案
2021-1-5 10:27:02
等的时间长,问题出在for循环上了
for (i=0;i>=0;i++)i,这个for循环,i初值为0,若输入的不是姓名、性别、成绩,那么就不会遇到break,i会从0一直加到溢出变为负数,才跳出循环。完全可以不要这个for循环
while(1)
{
    scanf("%s",input);
    
    if (strcmp(input,"name")==0)
        printf("该考生姓名为%s\n接下来查询?\n",student1.name);
    else if (strcmp(input,"sex")==0)
        printf("该考生性别为%s\n接下来查询?\n",student1.sex);
    else if(strcmp(input,"score")==0)
        printf("该考生成绩为%d\n接下来查询?\n",student1.score);
    else if(strcmp(input,"No")==0||strcmp(input,"no")==0)
    {
        printf("感谢您的使用!\n");
        break;      
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-4 17:29:33 | 显示全部楼层
程序是按顺序跑的,你想输入no能快点出来就把关于no的if语句放在前面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-4 17:33:33 | 显示全部楼层
你的代码写的也有问题,for (i=0;i>=0;i++)这句为啥不改成判断键盘有没有输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-4 18:22:48 | 显示全部楼层
tian1234 发表于 2021-1-4 17:33
你的代码写的也有问题,for (i=0;i>=0;i++)这句为啥不改成判断键盘有没有输入

那请问怎么改呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 09:04:55 | 显示全部楼层
905853663 发表于 2021-1-4 18:22
那请问怎么改呢?

#include<stdio.h>
#include<string.h>
int main(void)
{
        int i;
        char input[10];
        struct Student
        {
                char num[20];
                char name[20];
                char sex[10];
                int score;
        };
        struct Student student1={"MZ441426","Mike","Male",516};
        printf("该考生编号为:%s\n",student1.num);
        printf("请问您要查询什么?\n(输入name查询姓名,输入sex查询性别,输入score查询成绩,输入No或no停止查询。)\n");
        while(1)
        {
        scanf("%s",input);
        if(input!=0)
        {
                if (strcmp(input,"name")==0)
                   {printf("该考生姓名为%s\n接下来查询?\n",student1.name);continue;}
                if (strcmp(input,"sex")==0)
                   {printf("该考生性别为%s\n接下来查询?\n",student1.sex);continue;}
                if(strcmp(input,"score")==0)
                   {printf("该考生成绩为%d\n接下来查询?\n",student1.score);continue;}
                    }
                    if(strcmp(input,"No")==0||strcmp(input,"no")==0)
                   {printf("感谢您的使用!\n");continue;}
                    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 09:05:41 | 显示全部楼层
循环改判断,break改成continue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 10:27:02 | 显示全部楼层    本楼为最佳答案   
等的时间长,问题出在for循环上了
for (i=0;i>=0;i++)i,这个for循环,i初值为0,若输入的不是姓名、性别、成绩,那么就不会遇到break,i会从0一直加到溢出变为负数,才跳出循环。完全可以不要这个for循环
while(1)
{
    scanf("%s",input);
    
    if (strcmp(input,"name")==0)
        printf("该考生姓名为%s\n接下来查询?\n",student1.name);
    else if (strcmp(input,"sex")==0)
        printf("该考生性别为%s\n接下来查询?\n",student1.sex);
    else if(strcmp(input,"score")==0)
        printf("该考生成绩为%d\n接下来查询?\n",student1.score);
    else if(strcmp(input,"No")==0||strcmp(input,"no")==0)
    {
        printf("感谢您的使用!\n");
        break;      
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 11:14:37 | 显示全部楼层
tian1234 发表于 2021-1-5 09:04
#include
#include
int main(void)

这样貌似差别不大吧。。应该都可以吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-5 11:22:33 | 显示全部楼层
sunrise085 发表于 2021-1-5 10:27
等的时间长,问题出在for循环上了
for (i=0;i>=0;i++)i,这个for循环,i初值为0,若输入的不是姓名、性别 ...

好的,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-5 11:56:25 | 显示全部楼层

问题解决了,请给评一个最佳答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 06:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表