当前位置: 代码迷 >> C语言 >> 编译通过,但运行错误
  详细解决方案

编译通过,但运行错误

热度:121   发布时间:2006-05-14 13:09:00.0
编译通过,但运行错误
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp;
int  strcomp  ( char strin[], char strcp[] );//比较字符串
int strlength( char *s );//求长度
void clean ( char *s );//清空数组
int main( void )
{
int k=0, ci=0, ch=0;//ch为记录换行次数
char strin[20]={"0"}, strcp[20]={"0"};//strin:为存储要查询的字符串 strcp:存储从文件里读取的一个字符串
 if( (fp=fopen("E:\\text.txt","r")) == NULL )
{ printf("无法打开该文本文件\n"); return(0); }
 for( ; ; )
{
printf("0:退出; 1:进入查询;\n");
scanf("%d",&k);
getchar();
if( 0==k ) exit(0);
printf("请输入要查询的字符或字符串\n");
scanf("%s",strin);
getchar();
while( !feof(fp) )
{
for( ci=0; strcp[ci] != ' '; ci++ )
if( ( strcp[ci]=fgetc(fp) ) == '\n' )
{
ch++;
strcp[ci]=' ';
break;
}
strcp[ci]='\0';
if( strcomp( strin,strcp ) == 1 )
printf("字符串 %s 出现在第 %d 行\n",strin,ch);
clean( strcp );
}
clean( strin );
}
fclose( fp );
return(1);
}
int strlength( char *s )
{
int i=0;
while( *(s++) != '\0' )
i++;
return( i );
}
int strcomp( char strin[], char strcp[] )
{
int i;
if( strlength( strin ) != strlength( strcp ) )
return( 0 );
else
{
for( i=0; i < strlength( strin ); i++ )
if( strin[i] != strcp[i] )
return( 0 );
return(1);
}
}
void clean( char *s )
{
while( *s != '\0' )
{
*s='\0';
s++;
}
}
搜索更多相关的解决方案: PRE  编译  include  strin  

----------------解决方案--------------------------------------------------------
复杂的,不懂
----------------解决方案--------------------------------------------------------
程序我没有仔细的看,细看我也看不懂呵呵,文件我都没有学
就发现你的 主函数中的return
好象0是正常返回吧,

[此贴子已经被作者于2006-5-14 13:41:41编辑过]


----------------解决方案--------------------------------------------------------

文件我学得不是很深,让版主老大帮您看看,他准会的,呵呵……


----------------解决方案--------------------------------------------------------
要是到晚上还没人看,我保证看

我一会给个高三学生上课去~~~
没时间啦,逛一会要下了

----------------解决方案--------------------------------------------------------
while( !feof(fp) )
{
for( ci=0; strcp[ci] != ' '; ci++ )
if( ( strcp[ci]=fgetc(fp) ) == '\n' )
{
ch++;
strcp[ci]=' ';
break;
}
太乱了,这段应该有问题
----------------解决方案--------------------------------------------------------

按楼主意思改了下,只判断每行是否和输入串相同
[CODE]
#include "stdio.h"
#include "string.h"
#include "conio.h"

FILE *fp;
int Strcomp ( char strin[], char strcp[] );

int main( void )
{
int i, count;
char strin[20], strcp[20],ch;

while(1)
{
if( (fp=fopen("E:\\text.txt","r")) == NULL ) /*多次打开查询*/
{
printf("无法打开该文本文件\n");
exit(-1);
}
printf("0:退出; 1:进入查询;\n");
scanf("%d",&i);
getch();
if( i==0 )
exit(0);
printf("请输入要查询的字符或字符串\n");
gets(strin);
count=0; /*初始化*/
while( (ch=fgetc(fp)) != -1 )
{
for(i=0 ; ch != '\n' && ch != -1 ; i++,ch=fgetc(fp) )
strcp[i]=ch;
count++;
strcp[i]='\0';
if( Strcomp( strin,strcp ) == 1 )
{
printf("字符串 %s 出现在第 %d 行\n\n",strin,count);
break;
}
} /*清空多余*/
}
fclose( fp );
return 0;
}

int Strcomp( char strin[], char strcp[] ) /*大写*/
{
int i;
if( strlen (strin) != strlen( strcp ) )
return( 0 );
else
{
for( i=0; i < strlen( strin ); i++ ) /*strlen库函数直接用*/
if( strin[i] != strcp[i] )
return( 0 );
return(1);
}
}

[/CODE]


----------------解决方案--------------------------------------------------------

呵呵,谢了斑竹先

电信宽带实在太烂了,出点问题居然要4天才来修


----------------解决方案--------------------------------------------------------
还是不能正确运行!!!
斑竹还是不行咯,,我又改了改,看不出什么错误,但一运行就错
真的晕了

[CODE]

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp;
int  strcomp  ( char strin[], char strcp[] );
void clean    ( char *s );
int main( void )
{
int k=0, ci, ch=1;
char s='0', strin[20]={"0"}, strcp[20]={"0"};
if( (fp=fopen("E:\\text.txt","r")) == NULL )
{ printf("无法打开该文本文件\n"); return(0); }
  printf("0:退出; 1:进入查询;\n");
  scanf("%d",&k);
  getchar();
  if( 0==k )
   exit(0);
  printf("请输入要查询的字符或字符串\n");
  gets(strin);
  while( !feof(fp) )
  {
   ci=0;
   do
   {
    s=fgetc(fp);
    //printf("%c   ....\n",s);
    if( s=='\n' )
    {
     ch++;
     break;
    }
    else if( s==' ' )
     break;
    else
     strcp[ci++] = s;
   }while( 1 );
      if( strcomp(strin,strcp) == 1 )
       printf("字符串 %s 出现在第 %d 行\n",strin,ch);
  }
fclose( fp );
return(1);
}
int strcomp( char strin[], char strcp[] )
{
int i;
if( strlen( strin ) != strlen( strcp ) )
  return( 0 );
else
{
  for( i=0; i < strlen(strin); i++ )
   if( strin[i] != strcp[i] )
    return( 0 );
     return(1);
}
}

[/CODE]

[此贴子已经被作者于2006-5-19 14:23:52编辑过]


----------------解决方案--------------------------------------------------------
int strcomp( char strin[], char strcp[] )
{
int i;
if( strlen( strin ) != strlen( strcp ) )
return( 0 );
else
{
for( i=0; i < strlen(strin); i++ )
if( strin[i] != strcp[i] )
return( 0 );
return(1);
}
}

这是干么用的,解释一下得好
----------------解决方案--------------------------------------------------------
  相关解决方案