fgets函数相关问题

MancoCL 2020-11-03 09:21:08

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <conio.h>

int main() {
FILE *text;
const int MAXSIZE = 1000; //串的最大长度
int i = 0, num = 0, space = 0, symbol = 0, number = 0, letter = 0, word = 0, line = 0, english = 0;
char str[MAXSIZE];
text = fopen("test.txt", "r");
if (NULL == text)
printf("erro!");
else {
while (!feof(text)) {
fgets(str, MAXSIZE, text);
}
printf("%s",str);
i = 0;
if (str[0] != '\0')
line++; //确定字符串非空
while (str[i] != '\0') {
if (int(str[i]) == 32)
space++; //空格
else if ((int(str[i]) > 32 && int(str[i]) < 48) || (int(str[i]) > 57 && int(str[i]) < 65) ||
(int(str[i]) > 91 && int(str[i]) < 97) || (int(str[i]) > 122 && int(str[i]) < 128))
symbol++; //标点符号
else if ((int(str[i]) > 47 && int(str[i]) < 58))
number++; //数字
else if ((int(str[i]) > 64 && int(str[i]) < 91) || (int(str[i]) > 96 && int(str[i]) < 123))
letter++; //英文
else if (int(str[i]) < 0)
word++; //中文
if ((i + 1 - num) / 120 > 0) {
num += 120;
line++; //行数
}
if (i > 0)
if (((int(str[i - 1]) > 64 && int(str[i - 1]) < 91) || (int(str[i - 1]) > 96 && int(str[i - 1]) < 123)) &&
((str[i] == ' ')|| (int(str[i]) > 32 && int(str[i]) < 48) || (int(str[i]) > 57 && int(str[i]) < 65) ||
(int(str[i]) > 91 && int(str[i]) < 97) || (int(str[i]) > 122 && int(str[i]) < 128))) {
english++; //单词
}
i++;
}
word /= 2;
fclose(text);
printf("\n空格 = %d\n标点 = %d\n数字 = %d\n字母 = %d\n中文 = %d\n行数 = %d\n单词 = %d"
, space, symbol, number, letter, word, line, english);
}
return 0;
}

程序的功能是统计文本当中的数据的空格 标点 数字 字母 中文 行数 单词 段落数,目前的问题是当我读取数据的时候,以回车为段落划分的话,只会读取最后一个段落的数据,而前面的数据全部会被抛弃。


文档数据为:
 are you ready? 统计文本文件基本信息和其他基本操作。文本文件中事先存放着中文,英文,以及各种标点符号,试编写程序统计其中字符总数(含空格),空格总数,字母个数,数字个数,标点符号个数,汉字个数(含汉字标点),单词个数,行数和段落数。0123456789
are you ready? 统计文本文件基本信息和其他基本操作。文本文件中事先存放着中文,0123456789

求解
...全文
151 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
MancoCL 2020-11-03
  • 打赏
  • 举报
回复
引用 2 楼 自信男孩的回复:
楼主的程序fgets放在一个while循环里,自然后面的覆盖前面的。改成每次fgets之后都去判断空格,字符,数字等等即可~


建议判断一下fgets的返回值。另外,注意fgets会把回车符号加到缓存里~
主要是我之前不知道fgets遇到回车就结束了,后来调试发现不对劲,才找到的原因
自信男孩 2020-11-03
  • 打赏
  • 举报
回复
楼主的程序fgets放在一个while循环里,自然后面的覆盖前面的。改成每次fgets之后都去判断空格,字符,数字等等即可~


建议判断一下fgets的返回值。另外,注意fgets会把回车符号加到缓存里~
MancoCL 2020-11-03
  • 打赏
  • 举报
回复
已解决,每次读取到回车后fgets都会结束读取,出现这个情况的原因是后来的读取的数据将前面的数据给覆盖了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧