我有一个简单的c程序,该程序从文件中读取数据,并且应该每行打印一个单词,删除所有标点和空白行。我被困在检测和删除空白行。
这是代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *f;
//char filename[15];
char ch;
f = fopen("index.txt","r");
if (f == NULL)
{
printf("Cannot open file \n");
exit(0);
}
ch = fgetc(f);
while (ch != EOF)
{
ch = fgetc(f);
putchar (ch);
if (ch == ' ' || ch == '\n' || ch == '\t'){
printf("\n");
}
else if(ch == ',' || ch == '.'){
printf("");
}
}
fclose(f);
return 0;
}
我想到了这样删除标点符号: 否则if(ch ==','|| ch =='。'){printf(“”);}
,但也不起作用。
答案 0 :(得分:2)
在代码中出现错误的地方:
ch
的类型应该是int
,而不是char
','
或'.'
。当前,您正在打印所有已读取的内容(第一个字符除外)结果看起来类似于以下代码(我的index.dat的内容是您的问题的正文)。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
FILE *f = fopen("index.dat","r");
if (f == NULL)
{
perror("index.dat");
exit(EXIT_FAILURE);
}
int ch = fgetc(f);
while (ch != EOF)
{
// skip any leading whitespace
while (ch != EOF && isspace((unsigned char)ch))
ch = fgetc(f);
// on a non-white-space character
if (ch != EOF)
{
while (ch != EOF && !isspace((unsigned char)ch))
{
if (ch != ',' && ch != '.')
putchar(ch);
ch = fgetc(f);
}
fputc('\n', stdout);
}
}
fclose(f);
return 0;
}
输出
I
have
a
simple
c
program
that
reads
from
a
file
and
is
supposed
to
print
one
word
per
line
remove
all
punctuations
and
blank
lines
I
am
stuck
at
detecting
and
removing
blank
lines
至少这是您似乎想要实现的目标