我在C中有一段代码。但是我无法理解它的输出
#include<stdio.h>
main()
{
char a1[20];
char a2[30];
char a3[40];
scanf("%s",&a1);
gets(a2);
fgets(a3,sizeof(a3),stdin);
printf("%d,%d,%d\n",strlen(a1),strlen(a2),strlen(a3));
}
当我输入我的输入时
amit
singh
输出为4,0,6,fgets doest不允许我输入任何字符串,我只能输入2个输入?
答案 0 :(得分:3)
"amit\nsingh\n"
scanf
消耗“amit”(并将其写入a1
)gets
消耗“\ n”(并将空字符串写入a2
)fgets
消耗“singh \ n”(它写入a3
)输出正确。
请勿 EVER 使用gets
!
答案 1 :(得分:2)
scanf在流中留下'\ n',由gets读取。 获取不计算\ n的长度。因此你在那里得到0。 然后你的fgets读取“singh”并且因为它确实考虑了换行符,它输出6。
请查看以下参考资料,以便更好地理解:
答案 2 :(得分:2)
scanf()
使用 amit 并将其存储在数组a1
中。
由于scanf()
系列的函数将换行符留在输入缓冲区中,而gets()
读取换行符字符(它立即找到),它会存储一个将空字符串转换为a2
。
因此,对fgets()
的调用将 singh 读入a3
。 fgets()
还将换行符添加到目标变量中 - 这就是为什么你会看到a3
的6个字符作为字符串长度的原因。
由于没有更多输入命令,因此不会读取第3行。