我应该在 C 中创建一个全局缓冲区吗

should I create a global buffer in C

#include <stdio.h>

char buffer[2048];

int main()
{
    int a;

    do {
        printf("Enter an integer: ");
        fgets(buffer, sizeof(buffer), stdin);
        if (sscanf(buffer, "%d", &a) < 1)
            printf("Invalid input\n");
    } while (sscanf(buffer, "%d", &a) < 1);

    return 0;
}

我正在尝试使用 fgetssscanf 来读取用户的输入是否正在创建全局缓冲区的良好做法?

is creating a global buffer good practice?

最佳做法是尽可能限制对象(又名变量)的范围。这种转化为“如果任务可以用较小范围的变量同样好地解决,则应避免使用全局变量”

所以在引入全局之前你应该问问自己:为什么?您通过引入全局变量来解决什么问题?

您问题中的信息没有告诉我们您为什么需要全局 buffer 而不是在需要时定义局部 buffer

在现代计算机上,在函数内定义 2K 缓冲区通常不是问题。通常不涉及性能损失。通常不涉及内存问题(因为典型的堆栈大小要大得多)。

根据问题中给出的信息,答案是:“这是不好的做法 - 不要使用全局变量”。

OT:

它可能与真正的问题无关,但是您的代码很奇怪,因为您在同一个缓冲区上两次调用 sscanf。为避免这种情况,您可以这样做:

while(1) {
    printf("Enter an integer: ");
    if (fgets(buffer, sizeof(buffer), stdin) == NULL) exit(1);
    if (sscanf(buffer, "%d", &a) == 1) break;
    printf("Invalid input\n");
};