scanf_s(' %c', &c1, 1)fgets(c1, 1, stdin) 是不同的函数,用于不同的目的。

  • scanf_s 函数是用于从输入流中读取格式化的数据,其中 %c 是用于读取单个字符的格式说明符。所以 scanf_s(' %c', &c1, 1) 会读取一个字符并存储在 c1 变量中。在这种情况下,您需要提供变量的地址和大小来确保安全的读取。

  • fgets 函数是用于从文件流中读取一行数据,或者从标准输入流(stdin)中读取指定数量的字符。它需要提供一个字符数组作为缓冲区来存储读取的数据,而不是单个字符变量。fgets(c1, 1, stdin) 的第一个参数 c1 应该是一个字符数组,而不是单个字符变量。

如果您想使用 fgets 函数来读取单个字符,可以使用一个字符数组作为缓冲区,然后从缓冲区中提取所需的字符。以下是示例代码:

#include <stdio.h>

int main() {
    char c1[2];
    fgets(c1, sizeof(c1), stdin);
    if (c1[0] == 'q')
        printf("No");
    else if (c1[0] == 'k')
        printf("No");
    else
        printf("Yes");

    return 0;
}

在上述代码中,我们使用了一个字符数组 c1 作为缓冲区,大小为 2(包括一个用于存储字符和一个用于存储 null 终止符)。然后使用 fgets 函数从标准输入流中读取至多一个字符,并存储在 c1 中。然后通过检查 c1 数组的第一个元素来判断输入的字符是什么,并进行相应的输出。

C语言中 scanf_s 和 fgets 读取单个字符的差异及解决方案

原文地址: https://www.cveoy.top/t/topic/piv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录