Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中读取未知格式的行_C_String_File_Scanf - Fatal编程技术网

在C中读取未知格式的行

在C中读取未知格式的行,c,string,file,scanf,C,String,File,Scanf,我需要用C语言编写一个程序来读取文本,并用另一个字母替换一个字母。我是一名编程新手,到目前为止,我一直使用fscanf函数。 我如何在不知道格式的情况下阅读一行文本 我甚至不知道文件的长度 这是我的“file.txt”: 我需要将每个“m”改为“n”,然后打印出结果。感谢您的帮助请确定最大缓冲区长度,并使用以下内容阅读: 只需确定一个最大缓冲区长度,并使用以下选项读取: #包括 枚举{OLDCH='m',NEWCH='n'}; int main() { INTC; 而((c=getchar())

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

我甚至不知道文件的长度

这是我的“file.txt”:


我需要将每个“m”改为“n”,然后打印出结果。感谢您的帮助

请确定最大缓冲区长度,并使用以下内容阅读:


只需确定一个最大缓冲区长度,并使用以下选项读取:

#包括
枚举{OLDCH='m',NEWCH='n'};
int main()
{
INTC;
而((c=getchar())!=EOF){
if(c==OLDCH)
c=纽奇;
普查尔(c);
}
返回0;
}
#包括
枚举{OLDCH='m',NEWCH='n'};
int main()
{
INTC;
而((c=getchar())!=EOF){
if(c==OLDCH)
c=纽奇;
普查尔(c);
}
返回0;
}
#包括
char*repchar(char*str,char-from,char-to){
如果(str!=NULL){
char*p;
对于(p=str;*p;++p){
如果(*p==from)
*p=至;
}
}
返回str;
}
int main(){
字符行[256];
文件*fp;
fp=fopen(“file.txt”,“r”);
//scanf将一行输入char[]
//%[^\n]订单将非'\n'作为输入
//%*[\n]忽略输入'\n'
而(fscanf(fp,“%[^\n]%*[\n]”,第行)==1){
printf(“%s\n”,repchar(行'm','n');
}
fclose(fp);
}
#包括
char*repchar(char*str,char-from,char-to){
如果(str!=NULL){
char*p;
对于(p=str;*p;++p){
如果(*p==from)
*p=至;
}
}
返回str;
}
int main(){
字符行[256];
文件*fp;
fp=fopen(“file.txt”,“r”);
//scanf将一行输入char[]
//%[^\n]订单将非'\n'作为输入
//%*[\n]忽略输入'\n'
而(fscanf(fp,“%[^\n]%*[\n]”,第行)==1){
printf(“%s\n”,repchar(行'm','n');
}
fclose(fp);
}

您应该为您的问题提供一些示例输入和输出,您想做什么还不是很清楚。如果我理解正确,您可以阅读文本,找到您要查找的字符的匹配项,然后用另一个字符替换它。如果您确实想替换单个字母,那么您可以简单地使用
fgetc
fputc
。“fgetc”和“fputc”中的“f”表示“函数”。。。与宏getc和putc相反。fgetc和fputc只能在您需要函数指针时使用。您应该为您的问题提供一些示例输入和输出,您想做什么还不是很清楚。如果我理解正确,您可以阅读文本,找到您要查找的字符的匹配项,然后用另一个字符替换它。如果您确实想替换单个字母,那么您可以简单地使用
fgetc
fputc
。“fgetc”和“fputc”中的“f”表示“函数”。。。与宏getc和putc相反。fgetc和fputc只能在您需要函数指针时使用。如果我不知道文件的长度?请阅读我的答案中链接的
fgets
文档至少:从流中读取字符并将它们作为C字符串存储到str中,直到(num-1)已读取字符或到达换行符或文件结尾,以先到者为准。如果我不知道文件的长度?请阅读
fgets
的文档,该文档至少在我的回答中链接:从流中读取字符并将其作为C字符串存储到str中,直到(num-1)字符已被读取,或者换行符或文件结尾已到达,以先到者为准。我有一个文件上的文本。。。我不能使用getchar:/当然可以:myfilterpgmNel 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.
FILE *file = fopen(...);
char buffer[256];

fgets(line,256,file);
#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;
}
#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);
}