我正在学习 C 和系统编程。我正在尝试读取文本文件并以小写形式打印出单词。所有非字母字符都将是分隔符。我得到下面的输出。有人可以看看我的代码并给我一些关于如何删除单词之间的线条的提示吗?谢谢!
这是我的文本文件的开头:
荷马的伊利亚特古腾堡计划电子书,荷马
这本电子书可供任何人在任何地方免费使用,几乎没有任何限制。您可以根据本电子书或在线 www.gutenberg.org 中包含的 Project Gutenberg 许可条款复制、赠送或重新使用它
书名:荷马的伊利亚特
作者:荷马
译者:Andrew Lang, MA, Walter Leaf, Litt.D., 和 Ernest Myers, MA
发布日期:2012 年 1 月 14 日 [电子书 #3059] 发布日期:2002 年 2 月
英语语言
这是我的输出: 荷马的 iliad 的项目古腾堡电子书
由本垒打
这本电子书可供任何地方的任何人免费使用,几乎没有任何限制
你可以复制它
根据本电子书或 www gutenberg org 在线提供的古腾堡项目许可条款,将其赠送或重新使用
标题
荷马的伊利亚特
作者
本垒打
译者
安德鲁·朗
嘛
沃尔特叶
有点
和欧内斯特迈尔斯
嘛
发布日期
一月
电子书
发布日期
二月
语
英语
…………
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#define SIZE 256
int end_line(FILE *file, int c)
{
int endLine = (c == '\r' || c == '\n');
if (c == '\r')
{
c = getc(file);
if (c != '\n' && c != EOF)
ungetc(c, file);
}
return endLine;
}
int get_word(FILE *file, char *word, size_t wordSize)
{
size_t i = 0;
int c;
//skip non-alpha characters
while ((c=fgetc(file)) != EOF && !isalpha(c) && isspace(c)){
; //do nothing
}
if (c != EOF)
word[i++] = c;
//read up to the next non-alpha character and store it to word
while ((c=fgetc(file)) != EOF && i < (wordSize - 1) && isalpha(c) && !end_line(file, c))
{
c=tolower(c);
word[i++] = c;
}
word[i] = 0;
return c != EOF;
}
//Main Function
int main (int argc, char **argv)
{
char *input = argv[1];
FILE *input_file;
char word[SIZE];
input_file = fopen(input, "r");
if (input_file == 0)
{
//fopen returns 0, the NULL pointer, on failure
perror("Canot open input file\n");
exit(-1);
}
else
{
while (get_word(input_file, word, sizeof(word)))
{
//do something with word;
printf("%s\n", word);
}
}
fclose(input_file);
return 0;
}