2014-03-06 107 views
0

我试图在main()中使用此字符比较函数,而忽略区分大小写。有没有办法从main调用toupper(ch1)和toupper(ch2),这样如果提出-i(不区分大小写),我可以重用代码。如何从main()访问函数变量

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; 
} 
+0

是否需要区分大小写需要作为另一个参数传递。 –

+0

为什么不能在这个对话中使用CharacterCompare – michaeltang

回答

0

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

而是将不区分大小写作为参数传递给函数。

0

一般来说,如果您需要重用代码,请将其包装在自己的函数中。

在这种情况下,为什么会只调用touppermain

... 

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

或包裹的区分大小写的比较成一个函数:

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

朗的答案(没有测试过,但你shoukld得到的想法):

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; 
} 

而在主要例如一些例如:

ignorecase = argv[1] == "-i" ; 
int different = CharacterCompare(f2, f2, name1, name2, ignorecase) ; 
+0

Got it!非常感激。 – aguilar