为什么gets()不起作用而scanf()在这里起作用

时间:2018-08-13 13:00:52

标签: c scanf gets

我正在解决以下问题。问题的链接是https://www.codechef.com/problems/CHEFSTLT

厨师发现了两张非常旧的纸,每张纸最初都包含一串小写的拉丁字母。两张纸上的琴弦长度相等。但是,由于纸张很旧,一些字母变得不可读。 主厨想估计这些字符串之间的差异。假设第一个字符串命名为S1,第二个字符串命名为S2。不可读符号用问号符号“?”指定。字符串之间的差等于位置i的数量,因此S1i不等于S2i,其中S1i和S2i分别表示i在S1和S2中的位置处的符号。 如果Chef将所有不可读的符号更改为小写拉丁字母,则想知道两个字符串之间的最小和最大差异。现在您已经完全了解Chef的编程专业知识,您可能已经猜到了他也需要您帮助解决此问题。继续,帮助他! 输入项 输入的第一行包含一个整数T,表示测试用例的数量。 T测试用例的描述如下。 测试用例的第一行包含字符串S1。 测试用例的第二行包含字符串S2。 这两个字符串都由小写的拉丁字母和问号组成,这些地方的符号不可读。 输出量 对于每个测试用例,输出两个给定的字符串之间的最小和最大差异,它们之间用一个空格隔开。

我的代码是

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void){
int t;
scanf("%d",&t);
while(t--){
    fflush(stdin);
    char a[100],b[100];
    gets(a);gets(b);
    int l = strlen(a);
    int min=0,max=0,i=0;
    while(i<l){
        if(a[i]=='?' || b[i]=='?'){
           max++;
        }
        else if(a[i]!=b[i]){
            min++;
            max++;
        }
        i++;
    }
    printf("%d %d\n",min,max);
}
return 0;
} 

但这给了我错误的答案,直到我使用scanf()而不是gets()进行输入。我的问题是为什么会这样。

1 个答案:

答案 0 :(得分:0)

请注意,“ gets()空格视为输入字符串的一部分,并在遇到换行符或EOF时结束输入。”

因此可能会输入“其他”

更多enter image description here