首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从main()访问函数变量

如何从main()访问函数变量
EN

Stack Overflow用户
提问于 2014-03-06 09:12:20
回答 3查看 66关注 0票数 0

我试图在main()中使用这个字符比较函数,同时忽略大小写敏感性。是否有一种方法从main调用to (Ch1)和ch2,以便如果引发-i (大小写不敏感),我可以重用代码。

代码语言:javascript
复制
int CharacterCompare( FILE *file1, FILE *file2, char file1name[], char file2name[] )
{
   int ch1, ch2;
   int differ = 0;

   do
   {

    ch1 = fgetc( file1 );
      ch2 = fgetc( file2 );
      differ++;

      if ( feof( file1 ) && !feof( file2 ) )
      {  
         printf( "EOF on %s\n", file1name );
         return 1;         
      }
      else if ( feof( file2 ) && !feof( file1) )
      {
         printf( "EOF on %s\n", file2name );
         return 1;
      }

      if (ch1 != ch2)
      {
         printf( "files differ: char %d\n", differ );
         return 1;
      }     
   } 
   while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (ch1 == ch2) );

   printf( "files are equal\n" );

   return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-06 09:24:23

很长的答案(没有测试,但你应该知道):

代码语言:javascript
复制
int Compare(char ch1, char ch2, int ignorecase)
{
  if (ignorecase)
  {
    ch1 = toupper(ch1) ;
    ch2 = toupper(ch2) ;
  }

  return ch1 == ch2 ;
}


int CharacterCompare( FILE *file1, FILE *file2, char file1name[], char file2name[],
                      int ignorecase )
{
   int ch1, ch2;
   int differ = 0;

   do
   {
    ch1 = fgetc( file1 );
      ch2 = fgetc( file2 );
      differ++;

      if ( feof( file1 ) && !feof( file2 ) )
      {  
         printf( "EOF on %s\n", file1name );
         return 1;         
      }
      else if ( feof( file2 ) && !feof( file1) )
      {
         printf( "EOF on %s\n", file2name );
         return 1;
      }

      if (Compare(ch1, ch2, ignorecase))
      {
         printf( "files differ: char %d\n", differ );
         return 1;
      }     
   } 
   while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (ch1 == ch2) );

   printf( "files are equal\n" );

   return 0;
}

主要的例子是:

代码语言:javascript
复制
ignorecase = argv[1] == "-i" ;
int different = CharacterCompare(f2, f2, name1, name2, ignorecase) ;
票数 2
EN

Stack Overflow用户

发布于 2014-03-06 09:15:53

简短的(也是唯一的)答案是:不,您不能访问在其他函数中本地声明的变量。

相反,将大小写不敏感作为参数传递给函数。

票数 1
EN

Stack Overflow用户

发布于 2014-03-06 09:16:03

通常,如果您需要重用代码,请将其包装在它自己的函数中。

在这种情况下,为什么只需要从toupper main调用

代码语言:javascript
复制
...

  if (toupper(ch1) != toupper(ch2))
  {
     printf( "files differ: char %d\n", differ );
     return 1;
  }
 ...
  while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (toupper(ch1) == toupper(ch2)) );

或者将不区分大小写的比较包装到一个函数中:

代码语言:javascript
复制
int caseinvariantcomp(char c1, char c2) {
    return toupper(c1) - toupper(c2);
}

...

  if (caseinvariantcomp(ch1, ch2))
  {
     printf( "files differ: char %d\n", differ );
     return 1;
  }
 ...
  while( ( !feof( file1 ) ) && ( !feof( file2 ) ) && (!caseinvariantcomp(ch1, ch2)) );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22219792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档