0

我需要用 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”,然后打印出结果。感谢您的帮助

4

3 回答 3

3

只需确定最大缓冲区长度并使用以下命令读取它fgets

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

fgets(line,256,file);
于 2012-06-21T17:24:49.287 回答
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;
}
于 2012-06-21T18:04:31.497 回答
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);
}
于 2012-06-21T23:21:43.470 回答