【问题标题】:Read text from file skipping any spaces or empty lines从文件中读取文本,跳过任何空格或空行
【发布时间】:2014-05-06 14:19:53
【问题描述】:

嗨。 我需要读取几个字符之间没有空格或空行的文件。它们可以有不同的布局,例如 1.txt、2.txt 或 3.txt:


1.txt:

t
h
i
s
f
i
l
e

2.txt:

l

i

k

e

t

h

a

t

3.txt:

s o m e t h i n g
l i k e 
t h a t

我该怎么做?我只有以下代码:

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

int main(){
    char c ;
    FILE *fp;

    fp = fopen("1.txt","r");
    if(fp == NULL){
    puts("Open file failed\n");
    exit(-1);
    }

    while(fscanf(fp,"%c\n",&c)!=EOF){
        /*do things with c var*/
    }

    fclose(fp);
    exit(0);
}

【问题讨论】:

  • while ((c = fgetc(fp)) != EOF) { if (isspace(c)) 继续; ... }
  • 不要使用 fscanf,像 kusma 建议的那样使用 fgetc。然后检查空格(空格、换行符、制表符)并存储或输出字符是否正常
  • 像 kusma 建议的那样:使用fgetc,并将c 的类型更改为int,因为这是fgetc 返回的内容
  • 好的,谢谢。它就像我想要的那样工作。
  • 其他问题.. 而且,在其他情况下,如果我有单词而不是字符并且我一行中只有一个单词?也就是说,它们之间没有空行的单词。

标签: c file


【解决方案1】:

我想您是在问如何读取文本文件,忽略空格和空行。请澄清您的问题,以便我们更好地帮助您。

以下是帮助您入门的内容:

您可以读取整个文件,然后删除您不想要的任何内容。以下帖子与我的经验一致,即您的应用程序可能会以这种方式运行得更快: Reading a file faster in C

如果您同意这种方法,下一篇文章将向您展示如何将文本文件读入缓冲区,并进行一些错误处理: Reading the whole text file into a char array in C

然后你可以使用类似这样的东西来删除空格,并且对于额外的新行也可以使用类似的东西: Function to remove spaces from string/char array in C

我希望这可以帮助您入门,也许今天有人会抽空为您发布一些代码。

【讨论】:

  • 这个问题解决了。使用单个字符就可以了……现在,另一个问题,与此类似,但带有单词……如果我有单词而不是字符,并且一行中只有一个单词?也就是说,它们之间没有空行的单词。问题链接:link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多