gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:29:27 24 4
gpt4 key购买 nike

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

厨师发现了两张非常古老的纸,每张纸上原来都包含一串小写拉丁字母。两张纸上的绳子长度相等。但由于纸张年代久远,有些字母已经无法辨认。Chef 希望估计这些字符串之间的差异。假设第一个字符串名为 S1,第二个字符串名为 S2。不可读的符号用问号符号“?”指定。字符串之间的差异等于位置 i 的数量,使得 S1i 不等于 S2i,其中 S1i 和 S2i 分别表示 S1 和 S2 中第 i 个位置的符号。如果 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() 接受输入。我的问题是为什么会发生这种情况。

最佳答案

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

因此可能会输入“其他东西”

了解更多See this

关于c - 为什么 gets() 不起作用而 scanf() 在这里起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com