【发布时间】:2021-06-21 12:10:34
【问题描述】:
#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 输入时,它不起作用,但如果我使用 get,它会起作用。 在这里,我正在比较字符串的元素并显示相似元素的数量。 例如输入a:1010101 电话:9898101 然后它给出 4 作为输出,但是当我使用 gets 时它给出 3。
【问题讨论】:
-
请阅读更多 abpout
fgets以及它在缓冲区中存储的内容。 -
另外请告诉我们“它不起作用”的真正含义。 如何不行吗?对于某些指定的输入,预期和实际输出是多少?您是否尝试过逐句执行代码语句(同时监视变量及其值)以查看实际发生的情况?使用标准的
strlen函数获取字符串长度有什么问题? -
请提供更多关于“不起作用”的方式和时间的信息 - 您是否尝试输入超过 20 个字符,所以
gets会破坏您的记忆(可能)但fgets会限制您的记忆输入? -
究竟是什么“不起作用”? fgets 的代码似乎工作正常:
printf 'foo\nfoo\n' | ./a.out按预期打印4。你的输入是什么?你得到什么输出?您的实际输出与您的预期有何不同? -
fgets()在输入缓冲区中读取并包含换行符。gets()在输入缓冲区中读取但不包含换行符。如果您的输入长度为 18 个或更少的字符(不包括换行符),则两者都应该按照发布的方式工作。如果您的输入正好是 19 个字符长(不包括换行符),fgets()版本会在第二个fgets()上读取换行符。如果您的输入是 20 个字符或更多字符,gets()版本会调用未定义行为。
标签: c c-strings string-comparison fgets trailing-newline