gpt4 book ai didi

c - 我想读取一个名为 input.txt(某个名称)的文本文件,并将偶数和奇数单词分成两个不同的文件名 Even.txt 和 odd.txt

转载 作者:行者123 更新时间:2023-11-30 19:21:47 27 4
gpt4 key购买 nike

这是相同的代码。我面临的问题是,我无法在任何文件上写入任何内容。请帮忙解决这个问题

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

int main()

{
FILE *fe;
FILE *fo;
FILE *fg;
int i;
int j,l;
char ch;
char tmp[100] ;

fo = fopen("oddfile.txt","a");
if (fo == NULL)
{
perror("ODDFILE");
}
fclose(fo);

fe = fopen("evenfile.txt","a");
if (fe == NULL)
{
perror("EVENFILE");
}
fclose(fe);

fg = fopen("generalfile","r");
if (fg == NULL)
{
perror("GENERALFILE");
}

while(ch = fgetc(fg)!=EOF)
{
if (ch != '\n' && ch != 't' && ch != ' ')
{
tmp[i] = ch;
i++;
}


else
{
printf("%s",tmp);
l =strlen(tmp);
j = l % 2;
if (j == 0)
{
fe = fopen("evenfile.txt","ab");
if (fe == NULL)
{
perror("EVENFILE");
}

fwrite(&tmp,sizeof(tmp),1,fe);
fclose(fe);

}

else
{
fo = fopen("oddfile.txt","ab");
if (fo == NULL)
{
perror("ODDFILE");
}
fwrite(&tmp,sizeof(tmp),1,fo);
fclose(fo);

}
}

}

}

我的代码已成功编译,但无法获得所需的输出

最佳答案

更改:

 while(ch = fgetc(fg)!=EOF)

 while( (ch = fgetc(fg)) !=EOF)

优先规则使两者的行为不同。按照编码方式,ch 始终设置为 0 或 1,这两个字符都不是可打印字符。

没有理由多次打开文件。只需在循环之前打开每个输出文件一次。您最好使用 fprintf 而不是 fwrite,并且不要使用 tmp 的大小作为长度;您已经计算了字符串的长度,所以使用它!您可能还想在每个单词后写一个换行符或一些分隔符。如果输入包含大单词,您确实需要检查堆栈溢出并进行处理。盲目地假设您的输入单词适合 100 个字符的数组是一场即将发生的灾难。只是比未能在输入末尾放置空字符并在可能不是字符串的字符数组上调用 strlen 稍微糟糕一些。 (这是您遇到的另一个错误:您需要在输入末尾将 NULL 写入 tmp 中。)

另请注意,收到一条错误消息非常烦人:

ODDFILE: no such file or directory

如果程序实际关心的文件不是“ODDFILE”。

最后(尽管这个短程序中完全有可能存在更多错误),停止仅仅为了遵守 1983 年标准实践而依赖编译器中存在的行为将是一个好主意。 main 函数正确地为 int main( void ),或者(甚至更好)使用 int main( int argc, char **argv) 并允许调用者指定输入文件名称。并从 main 返回一个值!还要打开编译器警告,因为它们会为您提供有用的信息。

关于c - 我想读取一个名为 input.txt(某个名称)的文本文件,并将偶数和奇数单词分成两个不同的文件名 Even.txt 和 odd.txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19077228/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com