在C中读取一行未知格式

时间:2012-06-21 17:21:43

标签: c string file scanf

我需要在C中编写一个读取文本的程序,并用另一个字母替换一个字母。我是编程新手,到目前为止我总是使用fscanf函数。 如何在不知道格式的情况下阅读一行文字?

我甚至不知道文件的长度......

有我的“file.txt”:

Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura,
ché la diritta via era smarrita.
Ahi quanto a dir qual era è cosa dura
esta selva selvaggia e aspra e forte
che nel pensier rinova la paura!
Tant' è amara che poco è più morte;
ma per trattar del ben ch'i' vi trovai,
dirò de l'altre cose ch'i' v'ho scorte.
Io non so ben ridir com' i' v'intrai,
tant' era pien di sonno a quel punto
che la verace via abbandonai.

我需要用“n”改变每个“m”而不是打印出结果。谢谢你的帮助

3 个答案:

答案 0 :(得分:3)

只需确定最大缓冲区长度并使用fgets读取它:

FILE *file = fopen(...);
char buffer[256];

fgets(line,256,file);

答案 1 :(得分:0)

#include <stdio.h>

enum { OLDCH = 'm', NEWCH = 'n' };

int main()
{
    int c;

    while ( (c = getchar()) != EOF ) {
        if( c == OLDCH )
            c = NEWCH;
        putchar(c);
    }

    return 0;
}

答案 2 :(得分:0)

#include <stdio.h>

char* repchar(char *str, char from, char to){
    if(str != NULL){
        char *p;
        for(p=str;*p;++p){
            if(*p == from)
                *p = to;
        }
    }
    return str;
}

int main(){
    char line[256];
    FILE *fp;
    fp=fopen("file.txt","r");
    //input of one line to char[] by scanf
    //%[^\n] order takes as input a non '\n'
    //%*[\n] ignore input '\n'
    while(fscanf(fp, "%[^\n]%*[\n]", line)==1){
        printf("%s\n", repchar(line, 'm', 'n'));
    }
    fclose(fp);
}