-2
#include <stdio.h>
int main(){
    char a[20],b[20];
    int i,c=0,m=0;
    
    fgets(a,20,stdin);
    fgets(b,20,stdin);
    while(a[c]!=0){
        c++;
    }
    for(i=0;i<c;i++)
    { 
        if(a[i]==b[i])
        m=m+1;
    }
    printf("%d",m);      
}

当我使用 fgets 输入时,它不起作用,但如果我使用gets,它会起作用。在这里,我正在比较字符串的元素并显示相似元素的数量。例如输入a:1010101 b:9898101然后它给出4作为输出,但是当我使用gets时它给出3。

4

1 回答 1

1

gets与不安全函数(C 标准不支持)相反,如果读取字符的数组有足够的空间,该函数fgets可以将输入的字符串附加到换行符。'\n'因此,如果通过调用获得的两个字符串fgets具有相等的长度并且新行字符存储在其中,那么它将在您的第二个 for 循环中计数。

要从通过调用 fgets 获得的字符串中删除换行符'\n',您可以使用例如以下方法

#include <string.h>

//...

a[ strcspn( a, "\n" ) ] = '\0';
b[ strcspn( b, "\n" ) ] = '\0';

一般来说,您的程序是不正确的,因为用户可以输入不同长度的字符串。

于 2021-06-21T12:26:16.257 回答