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;
}

posted on 2020-12-17 22:28  不依法度  阅读(172)  评论(0)    收藏  举报

导航