求问下面的代码哪里错了以及怎么改?输不出来是什么原因

C语言 码拜 4年前 (2017-05-03) 659次浏览
题目:
编写程序,包含2个功能:
1.输入10个学生的3门课程的信息,包括学号、姓名、课程名和成绩;
2.成绩查询:以姓名、学号和课程名称为条件,查询课程成绩。
代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
struct   student{
char  id[20];
char  name[20];
int   cname[3];
int   score[3];
} stud[SIZE];
void input()  /* 输入学生的信息 */
{
int i;

for(i=0;i<SIZE;i++)
{
printf(“第%d个学生的信息:\n”,i+1);
scanf(“%s%s%s%s%s%d%d%d”,stud[i].id,stud[i].name,&stud[i].cname[0],&stud[i].cname[1],&stud[i].cname[2],&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
}
}
void output()  /* 输出学生的信息 */
{
int i;
printf(“\n”);
for(i=0;i<SIZE;i++)
{
printf(“%s %s %s %s %s %d %d %d\n”,stud[i].id,stud[i].name,&stud[i].cname[0],&stud[i].cname[1],&stud[i].cname[2],stud[i].score[0],stud[i].score[1],stud[i].score[2]);
}
}
/* 成绩查询输出信息 */
void sortput()
{
int z,n; //选择项
int i;      //行
char zhi[20];
for(;n=1;)
{
printf(“Search function :\n”);
printf(“1. Search use id :\n”);
printf(“2. Search use name :\n”);
printf(“3. Search use cname :\n”);
printf(“4. Search all :\n”);
printf(“Choose :”);
scanf(“%d”,&z);
printf(“Zhi :”);
scanf(“%s”,zhi);

printf(“Search results : \n”);
for(i=0;i<SIZE;i++)//行
{
if(z==1)
{
if(zhi==stud[i].id)
{
printf(“%s%s%s%d%d%d”,&stud[i].cname[0],&stud[i].cname[1],&stud[i].cname[2],&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
}
}
if(z==2)
{
if(zhi==stud[i].name)
{
printf(“%s%s%s%d%d%d”,&stud[i].cname[0],&stud[i].cname[1],&stud[i].cname[2],&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
}
}
if(z==3)
{
if(atoi(zhi)==”&stud[i].cname[0]”)
{
printf(“%d”,&stud[i].score[0]);
}
else if(atoi(zhi)==”&stud[i].cname[1]”)
{
printf(“%d”,&stud[i].score[1]);
}
else
{
printf(“%d”,&stud[i].score[2]);
}

}
}
if(z==4)
{
output();
}
printf(“Choose 1继续:”);
scanf(“%d”,&n);
}
}
int main()
{
input();
sortput();
}

解决方案

20

#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
struct   student{
    char  id[20];
    char  name[20];
    int   cname[3];
    int   score[3];
} stud[SIZE];
void input()  /* 输入学生的信息 */
{
    int i;
  
    for (i  =0; i < SIZE; i++) { 
        printf("第%d个学生的信息:\n",i+1);
        scanf("%s%s%d%d%d%d%d%d", stud[i].id, stud[i].name,&stud[i].cname[0],&stud[i].cname[1],&stud[i].cname[2],&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);    
    }
}
void output()  /* 输出学生的信息 */
{
    int i;
    printf("\n");
    for(i=0;i<SIZE;i++) {
        printf("%s %s %d %d %d %d %d %d\n",stud[i].id,stud[i].name, stud[i].cname[0], stud[i].cname[1], stud[i].cname[2],stud[i].score[0],stud[i].score[1],stud[i].score[2]);
    }
}
/* 成绩查询输出信息 */
void sortput()
{
    int z,n;	//选择项 
    int i;      //行 
    char zhi[20];
    for(;n=1;) {
 	    printf("Search function :\n");
 	    printf("1. Search use id :\n");
 	    printf("2. Search use name :\n");
 	    printf("3. Search use cname :\n");
        printf("4. Search all :\n");
        printf("Choose :");
        scanf("%d", &z);
        printf("Zhi :");
        scanf("%s",zhi);
 
        printf("Search results : \n");
        for(i=0;i<SIZE;i++) {//行 
            if(z==1)  
            {
                if(strcmp(zhi, stud[i].id) == 0)
                {
                    printf("%d%d%d%d%d%d", stud[i].cname[0], stud[i].cname[1], stud[i].cname[2], stud[i].score[0], stud[i].score[1], stud[i].score[2]);
                }
            }
            if(z==2) {
                if(strcmp(zhi, stud[i].name) == 0) {
                    printf("%d%d%d%d%d%d", stud[i].cname[0], stud[i].cname[1], stud[i].cname[2], stud[i].score[0], stud[i].score[1], stud[i].score[2]);
                }           	  
            }
            if(z==3) {
                if(atoi(zhi)== stud[i].cname[0]) {
                printf("%d", stud[i].score[0]);
            } else if(atoi(zhi) == stud[i].cname[1]) {
                printf("%d", stud[i].score[1]);
            } else {
                printf("%d", stud[i].score[2]);
            }
 
        }
    }
    if(z==4) {
        output();
    }
 	printf("Choose 1继续:");
 	scanf("%d", &n);
    }
} 
int main()
{
   input();
   sortput();
}

问题比较多,改了改;试试这个。
问题:
1. int类型的数据不能使用%s输入,当然也不能用%s输出;
2. printf输出时,就不要加&
3. 字符串比较不能直接比较,需要借助字符库函数,例如strcmp或strncmp
4. 注意代码风格和格式


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求问下面的代码哪里错了以及怎么改?输不出来是什么原因
喜欢 (0)
[1034331897@qq.com]
分享 (0)