gpt4 book ai didi

c - 如果输入具有特定大小和格式,为什么 fgets 调用会被忽略?

转载 作者:行者123 更新时间:2023-12-04 12:28:59 24 4
gpt4 key购买 nike

我有以下用 C 编写的代码

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

int main(void)
{
char buf1[8];
char buf2[1024];
int n;

fgets(buf1, 6, stdin);
n = atoi(buf1);

fgets(buf2, 16, stdin);

return 0;
}

每当将长度超过 4 个字符的输入提供给第一个 fget 时,第二个 fget 就会存在,而无需等待输入。

如果第一个输入 = 1000,则第二个 fgets 挂起并等待输入。但是,如果输入有 5 个字符,例如 10000,则第二个 fget 存在并且程序结束。

这种行为的解释是什么?

最佳答案

如果在 fgets 调用中输入超过指定大小减 1,例如

char buf1[8];

fgets(buf1, 8, stdin);

输入是
1234567

那么与按下的 Enter 键对应的换行符 '\n' 不会从输入缓冲区中读取。

字符数组 f1 将包含以下内容
{ '1', '2', '3', '4', '5', '6', '7', '\0' }

因此输入缓冲区保持非空,第二次调用 fgets 读取输入缓冲区的尾部,而无需再等待用户输入。

当输入小于指定大小减 1 时,新行字符 '\n' 被读入字符数组,输入缓冲区将为空。

例如,如果对于这个电话
fgets(buf1, 8, stdin);

用户输入
123456

那么字符数组将包含
{ '1', '2', '3', '4', '5', '6', '\n', '\0' }

关于c - 如果输入具有特定大小和格式,为什么 fgets 调用会被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59096773/

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