fgets和gets
今天发现一个之前都没注意gets和fgets的重大区别
一篇更多参考的博客
下面这两个代码效果是一样的
在这里区分一下gets和fgets
fgets读的代码多个\n,就是巴拉巴拉\n\0
gets是巴拉巴拉\0
gets 换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
补充:strlen计算的字符个数不包括\0
char a[80],b[80];
gets_s(a);
fgets(b, 80, stdin);
int n = strlen(a);//abc abc->7
int m = strlen(b);//abc abc->8
printf("%d\n%d", n,m);
C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream,读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1)个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
声明 下面是 fgets() 函数的声明。
char *fgets(char str, int n, FILE stream)
参数:
str -这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n – 这是要读取的最大字符数(包括最后的空字符)**。通常是使用以 str传递的数组长度。
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流

#include<stdio.h>
int main()
{
char a[1000];
int i;
fgets(a,1000,stdin);
//fgets多读个/n,位数多了
//所以要再n--,一次
for (i = 0; a[i] != '\0'; i++);
int n = i-1;
int count = 0;
for (i = 0; i < n; i++)
{
if (a[i] != ' ' && a[i + 1] == ' ') count++;
if (a[i] != ' ' && a[i + 1] == '\n') count++;
}
printf("%d\n", count);
return 0;
}
#include<stdio.h>
int main()
{
char a[1000];
gets(a);
int l, num = 0, i;
for (i = 0; a[i] != '\0'; i++);
l = i;
for (i = 0; i < l; i++)
{
if (a[i] != ' ' && a[i + 1] == ' ')
num++;
if (a[i] != ' ' && a[i + 1] == '\0')
num++;
}
printf("%d\n", num);
return 0;
}
浙公网安备 33010602011771号