关于C++程序调试问题。跪求C++高手。

程序如下:
#include <iostream>
using namespace std;
#define N 5
void main()
{
char name[N][20];
cout<<"please input students' name:"<<endl;
for(int i=0;i<N;i++)
{
cin>>name[i];
}
char score[N][3];
cout<<"please input students' score:"<<endl;
for(int j=0;j<N;j++)
{
cin>>score[j];
}
char temp1[3];
char temp2[20];
for(int t=0;t<N-1;t++)
{
for(int r=t+1;r<N;r++)
{
if(*score[t]<*score[r])
{
strcpy(temp1,score[r]);
strcpy(score[r],score[t]);
strcpy(score[t],temp1);
strcpy(temp2,name[r]);
strcpy(name[r],name[t]);
strcpy(name[t],temp2);
}
}
}
for(int s=0;s<N;s++)
cout<<"number "<<s+1 <<" is "<<name[s]<<":"<<score[s]<<endl;
}

实际结果:
please input students' name:
liao
chen
li
zhao
yang
please input students' score:
99
85
95
87
73
number 1 is liao:99
number 2 is li:95
number 3 is chen:85
number 4 is zhao:87
number 5 is yang:73

理论结果:
number 1 is liao:99
number 2 is li:95
number 3 is zhao:87
number 4 is chen:85
number 5 is yang:73

请问问题出在哪?如果改正,谢谢!

for(int t=0;t<N-1;t++)
{
int k=t;
for(int r=t+1;r<N;r++)
{
if(*score[k]<*score[r])
{
k=r;
}
}
if(k != t)
{
strcpy(temp1,score[t]);
strcpy(score[t],score[k]);
strcpy(score[k],temp1);
strcpy(temp2,name[t]);
strcpy(name[t],name[k]);
strcpy(name[k],temp2);
}
}
////////////////这才是选择排序追问

首先谢谢你!
你提供的这个和我写那个程序是一样的,我试过的,结果是一样的。运行还是会出现上面提到的那个问题!

追答

我测试了一下
for(int t=0;t<N-1;t++)
{
int k=t;
for(int r=t+1;r<N;r++)
{
if(strcmp(score[k],score[r])<0) //这里修改成这样是可以的
{
k=r;
}
}
if(k != t)
{
strcpy(temp1,score[t]);
strcpy(score[t],score[k]);
strcpy(score[k],temp1);
strcpy(temp2,name[t]);
strcpy(name[t],name[k]);
strcpy(name[k],temp2);
}
}

追问

是的,这次是可以了!但如果我输入:
please input students' name:
a
b
c
d
e
please input students' score:
1
2
34
4
5
结果却会成这样:
number 1 is e:5
number 2 is d:4
number 3 is c:34
number 4 is b:2
number 5 is a:1

不是应该34在前么?再次求教!万分感谢!

追答

字符串的比较 和整数的比较是不同的,字符串比较是一位一位的比较

比如 34和4 英文3<4 所以4大于34
而如果是数值的话,就不会出现这种情况。

追问

你说的很有道理!但是成绩这个东西谁又能保证一定是2位数的呢?
实际上,分数可以同时存在1位数,2位数,甚至是3位数。这又如何解决呢?

追答

那为什么不用数值类型呢??一定要用字符串呢??

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-11
#include <iostream>
using namespace std;
#define N 5
void main()
{
char name[N][20];
cout<<"please input students' name:"<<endl;
for(int i=0;i<N;i++)
{
cin>>name[i];
}
int score[N];//使用整型
cout<<"please input students' score:"<<endl;
for(int j=0;j<N;j++)
{
cin>>score[j];
}
int temp;
char temp2[20];
for(int t=0;t<N-1;t++)
{
for(int r=t+1;r<N;r++)
{
if (score[t]<score[r])
{
temp = score[t];
score[t] = score[r];
score[r] = temp;
strcpy(temp2,name[r]);
strcpy(name[r],name[t]);
strcpy(name[t],temp2);
}
}
}
for(int s=0;s<N;s++)
cout<<"number "<<s+1 <<" is "<<name[s]<<":"<<score[s]<<endl;
}追问

首先谢谢你!

我刚才调试了很久,发现是那个二维数组出现的问题!于是修改成一维数组,结果调试成功。
这和你的修改过程是一样的!可见你的这个答案是可行的。

但改成二维数组保存分数,不知道有什么解决方法,这个我试了很久,没试出来!

追答

这个要把数组转换为数字,比较麻烦,要调用atoi函数

第2个回答  2012-12-11
建议用冒泡法,最干净,一共4+3+2+1=10次if
相似回答
大家正在搜