鱼C论坛

 找回密码
 立即注册
查看: 2168|回复: 2

[已解决]scanf和fgets的区别

[复制链接]
发表于 2023-10-22 00:28:51 | 显示全部楼层    本楼为最佳答案   
scanf 和 fgets 都是 C 语言中用于从标准输入读取数据的函数,但两者在实现和使用上有明显区别。

## scanf

1. scanf 以格式字符串为参数,可以按指定的格式从标准输入中读取数据。
2. scanf 可以识别各种不同类型的数据,包括整型、浮点型、字符型等。
3. scanf 函数在读取数据时会自动忽略空格、制表符和换行符等空白字符。这意味着可以单独使用 %d%f%c 等格式符来读取数据,无需考虑输入数据之间的空格。
4. scanf 函数的返回值为成功读取的数据项数。如果数据读取失败,则返回 0 或一个负数代表错误类型。

以下是一个使用 scanf 函数读取整数并输出的示例:
  1. #include <stdio.h>
  2. int main() {
  3.   int num;
  4.   printf("请输入一个整数:");
  5.   if (scanf("%d", &num) == 1) {
  6.     printf("输入的整数是:%d\n", num);
  7.   } else {
  8.     printf("输入非法!\n");
  9.   }
  10.   return 0;
  11. }
复制代码

## fgets

1. fgets 函数以字符数组为参数,可以从标准输入中读取一行字符串。
2. fgets 读取完一行字符串后,会将其中的换行符也一并读入。因此,需要使用 strlen 函数来获取实际读取的字符数,并将换行符替换为字符串结束符号 \0
3. fgets 函数在读取数据时不会自动忽略空白字符。因此,需要手动处理输入数据之间的空格。
4. fgets 函数的返回值为读取的字符串指针。如果读取失败,则返回 NULL。

以下是一个使用 fgets 函数读取字符串并输出的示例:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main() {
  4.   char str[100];
  5.   printf("请输入一行字符串:");
  6.   if (fgets(str, 100, stdin) != NULL) {
  7.     int len = strlen(str);
  8.     if (str[len-1] == '\n') {
  9.       str[len-1] = '\0';
  10.     }
  11.     printf("输入的字符串是:%s\n", str);
  12.   } else {
  13.     printf("输入非法!\n");
  14.   }
  15.   return 0;
  16. }
复制代码

希望能够解答你的疑惑,如有需要请随时追问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-27 11:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表