2016-06-28 53 views
0
char BOOK::retname() 
{ 
    return name; 
} 
void BOOK::searchbook() 
{ 
    clrscr(); 
    int flag=0; 
    char name2[30]; 
    FILE *fp; 
    cout<<"Enter Book Name: "; 
    cin.get(); 
    gets(name2); 
    char name1=retname(); 
    fp = fopen("Records.txt","rb"); 
    while(fread(&BOOK,sizeof(BOOK),1,fp)==1){ 
     if(strcmpi(name1,name2)==0) 
      { 
       flag=1; 
       cout<<"This book is available: "; 

    }  } 
} 

我在这里收到一些错误,如从char *到char的无效转换。
我是新来的文件处理问题,所以调试超出了我的思维范围。
请不要屠夫我要使用gets()函数
谢谢
PS:字符名称是Book类的私有成员
我想我不能在line14一个普通的字符名1等同串的名字,但我不知道知道如何解决这个问题。
编辑现在我16行
得到错误“之前的预期‘’令牌主表达式”
编辑我得到它的工作,感谢反正人民!请锁定这个线程MODS初始化参数1 int strcmpi(con​​st char *,const char *)'错误

+2

阅读完整的错误信息,看看类型使用调用'strcmp'的变量,然后学习如何使用C++标准库和它的类,而不是与旧的C混合构造你的代码。 –

+2

另外,千万不要使用旧的C函数'gets'。它已经从C语言中删除,并且很快也会从C++规范中删除。通常,不要混合使用C++和C输入/输出结构。它们默认同步,但是很混乱。 –

+0

'retname()'必须返回'char *',你可以通过'strcpy(name1,retname())' –

回答

1

看看错误行你得到

char name1=retname(); 

if(strcmpi(name1,name2)==0) 

strcmpi并不需要在char,它需要一个char *。 char不是char数组。 char是单个字符,所以我认为如果您有一个char name变量,并且该变量应该比一个字符长,则说明您错误地声明了某些内容。

+0

声明拷贝到'char * name1'中。现在它的名字是char name [30]是重要的,因为书的名字不能是单个字符,现在该怎么办? – user3500780

+0

然后名称不是char,它是一个char [30],可以用作char *。你的retname函数是错误的。如果这是C++,那么在任何情况下都应该使用std :: string。 – Taywee

+0

我得到它的工作,谢谢 – user3500780

0

retname();函数返回a 字符串,但name1变量只取一个字符,因为它声明为char。所以,声明name1变量char* name1char name1[]

+0

是的!我想到最初并尝试name1 [],但不起作用! :( – user3500780

相关问题