C语言中 scanf_s 和 fgets 读取单个字符的差异及解决方案
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 数组的第一个元素来判断输入的字符是什么,并进行相应的输出。
原文地址: https://www.cveoy.top/t/topic/piv 著作权归作者所有。请勿转载和采集!