c++题目根据姓名查找学生信息

#include<iostream.h>
#define studNum 2
struct student
{
int num;
char name[20];
int score;
}a[studNum];
int main()
{
char studName[20];
int i;
cout<<"请输入"<<studNum<<"名学生的信息(学号、姓名、成绩):"<<endl;
for(i=0;i<studNum;i++)
{
cin>>a[i].num;
cin>>a[i].name;
cin>>a[i].score;
}
cout<<"请输入所查找的学生姓名:"<<endl;
cin.getline(studName,20);
cin.getline(studName,20);
for(i=0;studName!=a[i].name&&i<studNum;i++)
{
if(studName==a[i].name)
{
cout<<"该学生的信息(学号、姓名、成绩)为:"<<endl;
cout<<a[i].num<<" "<<a[i].name<<" "<<a[i].score<<endl;
return 0;
}
else
{
cout<<"没有该生相应信息!"<<endl;
return 0;
}

}
return 0;
}
为什么查不到,总是“没有该生信息!”

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define STU_NUM 40 /* 最多的学生人数 */
#define COURSE_NUM 10 /* 最多的考试科目 */

struct student
{
int number; /* 每个学生的学号 */
char name[10]; /* 每个学生的姓名 */
int score[COURSE_NUM]; /* 每个学生M门功课的成绩 */
int sum; /* 每个学生的总成绩 */
float average; /* 每个学生的平均成绩 */
};
typedef struct student STU;

/* 函数功能: 向链表的末尾添加从键盘输入学生的学号、姓名和成绩等信息
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
整型变量n,表示学生人数
整型变量m,表示考试科目
函数返回值: 无
*/
void AppendScore(STU *head, int n, int m)
{
int j;
STU *p;

for (p=head; p<head+n; p++)
{
printf("\nInput number:");
scanf("%d", &p->number);
printf("Input name:");
scanf("%s", &p->name);
for (j=0; j<m; j++)
{
printf("Input score%d:", j+1);
scanf("%d", p->score+j);
}
}
}

/* 函数功能: 打印n个学生的学号、姓名和成绩等信息
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
整型变量n,表示学生人数
整型变量m,表示考试科目
函数返回值: 无
*/
void PrintScore(STU *head, int n, int m)
{
STU *p;
int i;
char str[100] = , temp[3];

strcat(str, "Number Name ");
for (i=1; i<=m; i++)
{
strcat(str, "Score");
itoa(i,temp, 10);
strcat(str, temp);
strcat(str, " ");
}
strcat(str," sum average");

printf("%s", str); /* 打印表头 */
for (p=head; p<head+n; p++) /* 打印n个学生的信息 */
{
printf("\nNo.%3d%8s", p->number, p->name);
for (i=0; i<m; i++)
{
printf("%7d", p->score[i]);
}
printf("%11d%9.2f\n", p->sum, p->average);
}
}

/* 函数功能: 计算每个学生的m门功课的总成绩和平均成绩
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
整型变量n,表示学生人数
整型变量m,表示考试科目
函数返回值: 无
*/
void TotalScore(STU *head, int n, int m)
{
STU *p;
int i;

for (p=head; p<head+n; p++)
{
p->sum = 0;
for (i=0; i<m; i++)
{
p->sum = p->sum + p->score[i];
}
p->average = (float)p->sum / m;
}
}

/* 函数功能: 用选择法按总成绩由高到低排序
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
整型变量n,表示学生人数
函数返回值: 无
*/
void SortScore(STU *head, int n)
{
int i, j, k;
STU temp;

for (i=0; i<n-1; i++)
{
k = i;
for (j=i; j<n; j++)
{
if ((head+j)->sum > (head+k)->sum)
{
k = j;
}
}
if (k != i)
{
temp = *(head+k);
*(head+k) = *(head+i);
*(head+i) = temp;
}
}
}

/* 函数功能: 查找学生的学号
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
整型变量num,表示要查找的学号
整型变量n,表示学生人数
函数返回值: 如果找到学号,则返回它在结构体数组中的位置,否则返回-1
*/
int SearchNum(STU *head, int num, int n)
{
int i;

for (i=0; i<n; i++)
{
if ((head+i)->number == num) return i;
}
return -1;
}

/* 函数功能: 按学号查找学生成绩并显示查找结果
函数参数: 结构体指针head,指向存储学生信息的结构体数组的首地址
整型变量n,表示学生人数
整型变量m,表示考试科目
函数返回值: 无
*/
void SearchScore(STU *head, int n, int m)
{
int number, findNo;

printf("Please Input the number you want to search:");
scanf("%d", &number);
findNo = SearchNum(head, number, n);
if (findNo == -1)
{
printf("\nNot found!\n");
}
else
{
PrintScore(head+findNo, 1, m);
}
}

/* 函数功能: 显示菜单并获得用户键盘输入的选项
函数参数: 无
函数返回值: 用户输入的选项
*/
char Menu(void)
{
char ch;

printf("\nManagement for Students' scores\n");
printf(" 1.Append record\n");
printf(" 2.List record\n");
printf(" 3.Search record\n");
printf(" 4.Sort record\n");
printf(" 0.Exit\n");
printf("Please Input your choice:");
scanf(" %c", &ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/
return ch;
}

int main()
{
char ch;
int m, n;
STU stu[STU_NUM];

printf("Input student number and course number(student number<40,course number<10):");
scanf("%d,%d", &n, &m);
while (1)
{
ch = Menu(); /* 显示菜单,并读取用户输入 */
switch (ch)
{
case'1':AppendScore(stu, n, m);/* 调用成绩添加模块 */
TotalScore(stu, n, m);
break;
case'2':PrintScore(stu, n, m); /* 调用成绩显示模块 */
break;
case'3':SearchScore(stu, n, m);/* 调用按学号查找模块 */
break;
case'4':SortScore(stu, n); /* 调用成绩排序模块 */
printf("\nSorted result\n");
PrintScore(stu, n, m); /* 显示成绩排序结果 */
break;
case'0':exit(0); /* 退出程序 */
printf("End of program!");
break;
default:printf("Input error!");
break;
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-17
#include<iostream.h>
#include <string.h>
#define studNum 2
struct student
{
int num;
char name[20];
int score;
}a[studNum];
int main()
{
char studName[20];
int m;
int i;
cout<<"请输入多少名学生:"<<endl;
cin>>m;
cout<<"请输入"<<m<<"名学生的信息(学号、姓名、成绩):"<<endl;
for(i=0;i<m;i++)
{
cin>>a[i].num;
cin>>a[i].name;
cin>>a[i].score;
}
cout<<"请输入所查找的学生姓名:"<<endl;
cin.getline(studName,20);
cin.getline(studName,20);
for(i=0;studName!=a[i].name&&i<m;i++)

if(strcmp(studName,a[i].name)==0){

cout<<"该学生的信息(学号、姓名、成绩)为:"<<endl;
cout<<a[i].num<<" "<<a[i].name<<" "<<a[i].score<<endl;
//return 0;
}
if(strcmp(studName,a[i].name)>0&&strcmp(studName,a[i].name)<0)

{ cout<<"没有该生相应信息!"<<endl;}

//return 0;

return 0;
}
第2个回答  2011-05-17
#include<iostream>
#include <cstring>
#define studNum 2
using namespace std;
struct student
{
int num;
char name[20];
int score;
} a[studNum];
int main()
{
char studName[20];
int i,tag=1;
cout<<"请输入"<<studNum<<"名学生的信息(学号、姓名、成绩):"<<endl;
for(i=0; i<studNum; i++)
{
cin>>a[i].num;
cin>>a[i].name;
cin>>a[i].score;
}
cout<<"请输入所查找的学生姓名:"<<endl;
while(cin.get()!='\n');//清空缓冲
cin.getline(studName,20);
//cin.getline(studName,20);
for(i=0; i<studNum; i++)
{
if(strcmp(studName,a[i].name)==0)
{
cout<<"该学生的信息(学号、姓名、成绩)为:"<<endl;
cout<<a[i].num<<" "<<a[i].name<<" "<<a[i].score<<endl;
tag=0;//标记是否找到
break;
//return 0;
}
}

if(tag)cout<<"没有该生相应信息!"<<endl;
//return 0;
return 0;
}
第3个回答  2011-05-17
for(i=0;studName!=a[i].name&&i<studNum;i++)

字符串比较要用 strcmp(),不能直接比较。
修改成:
for(i=0;i<studNum;i++)
{
if (0 == strcmp(studName, a[i].name))
{..............
就行了追问

为什么要用0==strcmp(),去掉0==怎么不行呢