scanf 和 fgets 都是 C 语言中用于从标准输入读取数据的函数,但两者在实现和使用上有明显区别。
## scanf
1.
scanf 以格式字符串为参数,可以按指定的格式从标准输入中读取数据。
2.
scanf 可以识别各种不同类型的数据,包括整型、浮点型、字符型等。
3.
scanf 函数在读取数据时会自动忽略空格、制表符和换行符等空白字符。这意味着可以单独使用
%d、
%f、
%c 等格式符来读取数据,无需考虑输入数据之间的空格。
4.
scanf 函数的返回值为成功读取的数据项数。如果数据读取失败,则返回 0 或一个负数代表错误类型。
以下是一个使用
scanf 函数读取整数并输出的示例:
#include <stdio.h>int main() { int num; printf("请输入一个整数:"); if (scanf("%d", &num) == 1) { printf("输入的整数是:%d\n", num); } else { printf("输入非法!\n"); } return 0;}
## fgets
1.
fgets 函数以字符数组为参数,可以从标准输入中读取一行字符串。
2.
fgets 读取完一行字符串后,会将其中的换行符也一并读入。因此,需要使用
strlen 函数来获取实际读取的字符数,并将换行符替换为字符串结束符号
\0。
3.
fgets 函数在读取数据时不会自动忽略空白字符。因此,需要手动处理输入数据之间的空格。
4.
fgets 函数的返回值为读取的字符串指针。如果读取失败,则返回 NULL。
以下是一个使用
fgets 函数读取字符串并输出的示例:
#include <stdio.h>#include <string.h>int main() { char str[100]; printf("请输入一行字符串:"); if (fgets(str, 100, stdin) != NULL) { int len = strlen(str); if (str[len-1] == '\n') { str[len-1] = '\0'; } printf("输入的字符串是:%s\n", str); } else { printf("输入非法!\n"); } return 0;}
希望能够解答你的疑惑,如有需要请随时追问。
球一个最佳答案谢谢啦!这对我非常重要!