905853663 发表于 2021-1-4 17:19:08

结构体相关问题

#include<stdio.h>
#include<string.h>
main()
{
        int i;
        char input;
        struct Student
        {
                char num;
                char name;
                char sex;
                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时,要挺久才能打印出感谢您的使用这句话,请问是为啥,我用了两个编译器都是这样

tian1234 发表于 2021-1-4 17:29:33

程序是按顺序跑的,你想输入no能快点出来就把关于no的if语句放在前面

tian1234 发表于 2021-1-4 17:33:33

你的代码写的也有问题,for (i=0;i>=0;i++)这句为啥不改成判断键盘有没有输入

905853663 发表于 2021-1-4 18:22:48

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

那请问怎么改呢?

tian1234 发表于 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;
      struct Student
      {
                char num;
                char name;
                char sex;
                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;}
                  }
}

tian1234 发表于 2021-1-5 09:05:41

循环改判断,break改成continue

sunrise085 发表于 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;      
    }
}

905853663 发表于 2021-1-5 11:14:37

tian1234 发表于 2021-1-5 09:04
#include
#include
int main(void)


这样貌似差别不大吧。。应该都可以吧?

905853663 发表于 2021-1-5 11:22:33

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

好的,懂了

sunrise085 发表于 2021-1-5 11:56:25

905853663 发表于 2021-1-5 11:22
好的,懂了

问题解决了,请给评一个最佳答案。
页: [1]
查看完整版本: 结构体相关问题