#include<iostream>
#include<cstring>
using namespace std;
bool isfake(char c,bool baby)
{
int i;
for(i=0;i<3;i++)
{
char *pleft,*pright;
if(baby)
{
pleft=left[i];
pright=right[i];
}else
{
pleft=right[i];
pright=left[i];
}
switch(result[i][0])
{
case 'u':
if(strchr(pright,c)==NULL)
{
return false;
}
break;
case 'e':
if(strchr(pleft,c)==NULL||strchr(pright,c)==NULL)
{
return false;
}
break;
case 'd':
if(strchr(pleft,c)==NULL)
{
return false;
}
break;
}
}
return true;
}
int main()
{
int n;
cin>>n;
char left[3][7];
char right[3][7];
char result[3][7];
while(n--)
{
for(int j=0;j<3;j++)
{
cin>>left[j]>>right[j]>>result[j];
}
for(char c='A';c<='L';c++)
{
if(isfake(c,true))
{
printf("%c is the counterfeit coin and it is light.\n",c);
break;
}else if(isfake(c,false))
{
printf("%c is the counterfeit coin and it is heavy.\n",c);
break;
}
}
}
return 0;
}
就是为什么会这样啊,找着一个老师的结题代码写的,为什么指针不能指向数组呢?
自己写一个不是可以指向吗 为什么第一个代码就不行呢 求解答谢谢了!
#include
using namespace std;
char left[3][7],right[3][7],result[3][7];
int isfake(char c,int baby){
int i;
for(i=0;i {
char *pleft,*pright;
if(baby)
{
pleft=left[i];
pright=right[i];
}else
{
pleft=right[i];
pright=left[i];
}
switch(result[i][0])
{
case 'u':
if(strchr(pright,c)==NULL)
{ return false;
}
break;
case 'e':
if(strchr(pleft,c)==NULL||strchr(pright,c)==NULL)
{
return false;
}
break;
case 'd':
if(strchr(pleft,c)==NULL)
{
return false;
} break;
}
}
return true;
}
int main(){
int n;
cin>>n;
}
把main下面的声明提到全局,就是放在include下面
#include
using namespace std;
char left[3][7];
char right[3][7];
char result[3][7];
bool isfake()
{
...
}
int main(){
...
}
就这样
大哥,你main()函数里面定义的数组是局部变量,isfake()函数前面没有定义left[i] 和 right[i] 数组,指针肯定没指向三;你想程序能正确运行,把main函数里面定义的数组放在全局就行了
你写的例子是建立在二维数组上,二维数组的b[1]是一个地址,所以s=b[1]可以实现。但是上面的pright=right[i];pright是字符指针,right[i]是二维数组代表一行的地址,起码要写一个形如pright=right[i][j]类似的句式
改好了 把数组改成大写就好了 不知道为什么 谢谢大家了 包括那位大哥
你的left和right数组都没有作为参数提供给isfake()函数,那isfake()怎么能够使用它们呢?
解决方法:
一,给isfake()增加两个参数char* left,char* right.
二,将left 和right 声明为全局变量.