C 从单个源文件创建多个文件
我目前正在学习C语言,并试图解决一个问题。我有一个文本文件名C 从单个源文件创建多个文件,c,C,我目前正在学习C语言,并试图解决一个问题。我有一个文本文件名elements.txt,其中包含以下内容: elements.txt Carbon (from Latin: carbo "coal") is a chemical element .. Oxygen is a chemical element with symbol O .. Platinum is a chemical element with symbol Pt ... Silicon is a chemical ele
elements.txt
,其中包含以下内容:
elements.txt
Carbon (from Latin: carbo "coal") is a chemical element ..
Oxygen is a chemical element with symbol O ..
Platinum is a chemical element with symbol Pt ...
Silicon is a chemical element with symbol Si ...
Titanium is a chemical element with symbol Ti ...
我想基于元素创建多个文件,例如carbon.txt
,oxygen.txt
,platinum.txt
,silicon.txt
和tianium.txt
来自elements.txt
这是我的源代码:
void magic(){
FILE *fp,*fp1, *fp2, *fp3, *fp4, *fp5;
char *fn, *fn1, *fn2, *fn3, *fn4, *fn5;
int ch;
fn1 = "new/carbon.txt";
fn2 = "new/oxygen.txt";
fn3 = "new/platinum.txt";
fn4 = "new/silicon.txt";
fn5 = "new/titanium.txt";
fn = "elements.txt";
// Read file
fp = fopen(fn ,"r");
if(fp == NULL){
printf("Error opening %s for reading. Program terminated",fn);
}
// Write file
fp1 = fopen(fn1, "w");
fp2 = fopen(fn2, "w");
fp3 = fopen(fn3, "w");
fp4 = fopen(fn4, "w");
fp5 = fopen(fn5, "w");
if(fp1 == NULL || fp2 == NULL || fp3 == NULL || fp4 == NULL || fp5 == NULL){
printf("Error opening %s for wrting. Program terminated",fn);
}
while( (ch= fgetc(fp)) != '\n')
fputc(ch, fp1);
while( (ch= fgetc(fp)) != '\n')
fputc(ch, fp2);
while( (ch= fgetc(fp)) != '\n')
fputc(ch, fp3);
while( (ch= fgetc(fp)) != '\n')
fputc(ch, fp4);
while( (ch= fgetc(fp)) != EOF)
fputc(ch, fp5);
printf("All files were created successfuly!.\n");
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);
fclose(fp5);
fclose(fp);
}
int main(){
magic();
return 0;
}
我确实创建了我的文件,但氧气用铂和铂打印,硅和钛用钛打印。当我在读这个角色时,好像有一个错误。不确定如何解决此问题。是否有方法使用for循环读取和写入多个文件
任何帮助都将不胜感激!谢谢在您的
.txt
输入文件中,不同元素的内容由两个换行符分隔,而不是一个。尝试重写它:
Carbon is...
Oxygen is...
等等(段落末尾没有额外的换行符)
或者,您可以检查是否存在2个换行符而不是1个换行符,但这将更加复杂
(说明:该程序将有关碳的内容写入
fn1
,然后看到一个换行符并切换到fn2
,然后看到另一个换行符并切换到fn3
。同样的事情发生在氧气段落的末尾) 在.txt
输入文件中,不同元素的内容由两个换行符分隔,而不是一个。尝试重写它:
Carbon is...
Oxygen is...
等等(段落末尾没有额外的换行符)
或者,您可以检查是否存在2个换行符而不是1个换行符,但这将更加复杂
(说明:该程序将有关碳的内容写入
fn1
,然后看到一个换行符并切换到fn2
,然后看到另一个换行符并切换到fn3
。同样的事情发生在氧气段落的末尾) 如注释所示,为了使此块正确,您应该添加return
语句:
if(fp1 == NULL || fp2 == NULL || fp3 == NULL || fp4 == NULL || fp5 == NULL){
printf("Error opening %s for wrting. Program leaving",fn);
return; //add this statement to leave function
}
否则,程序终止的语句将是谎言
如果希望代码处理只有空格的行的输入文件(而不是修改输入文件),请在将该行放入输出文件之前,为只有空格的行添加测试。使用
fgets()
、strstr()
和strlen()
将适合创建这样的测试 如注释所示,为了使此块正确,您应该添加return
语句:
if(fp1 == NULL || fp2 == NULL || fp3 == NULL || fp4 == NULL || fp5 == NULL){
printf("Error opening %s for wrting. Program leaving",fn);
return; //add this statement to leave function
}
否则,程序终止的语句将是谎言
如果希望代码处理只有空格的行的输入文件(而不是修改输入文件),请在将该行放入输出文件之前,为只有空格的行添加测试。使用
fgets()
、strstr()
和strlen()
将适合创建这样的测试程序终止,正确处理输入中的空行,程序终止,正确处理输入中的空行,更合适的是<代码>退出(1)< /代码>或类似的内容。指示操作系统的非零退出代码。@hyst329-return
允许从调用函数执行其他操作。在本例中,main()
将在下一步退出,但情况并非总是如此。或者将magic()
的类型更改为int
,然后返回1代码>void
返回类型在这里不是很好,因为它没有向main()
@hyst329-同意-好的建议提供任何信息。你应该把它加到你的答案中。:)更合适的方法是exit(1)
或类似的方法,以指示操作系统的非零退出代码。@hyst329-return
允许从调用函数执行其他操作。在本例中,main()
将在下一步退出,但情况并非总是如此。或者将magic()
的类型更改为int
,然后返回1代码>void
返回类型在这里不是很好,因为它没有向main()
@hyst329-同意-好的建议提供任何信息。你应该把它加到你的答案中。:)