我正在尝试编写一个能够打开文本文件并将其拆分的程序,以便将其保存为两个新文件以更快地保存文件。但是使用我现在的代码,我无法打印从orignal文件中选择的字符到新的字符。
在我的文本文件中,我有“荷兰人很高”的文字。
在我想要的新文件中: 文件1:Dthpol r tl 文件2:uc epeaeal
这是我到目前为止的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char cUsb1;
char cUsb2;
char str[128];
FILE *ptr_readfile;
FILE *ptr_usb1;
FILE *ptr_usb2;
ptr_readfile = fopen("Dutch People.txt","r"); // open readfile
while(ptr_readfile != NULL) // keep running while readfile != null
{
if (ptr_readfile != EOF) // keep running while readfile != eof
{
cUsb1 = fgetc(ptr_readfile); // to get a char out of the readfile
ptr_usb1 = fopen("USB1.txt", "w"); // create and open USB1 file
fwrite(cUsb1 , str , str , ptr_usb1); //writing get c to file
cUsb2 = fgetc(ptr_readfile); // to get a char out of the readfile
ptr_usb2 = fopen("USB2.txt", "w"); // create and open USB2 file
fwrite(cUsb2 , str , str, ptr_usb2); //writing get c to file
fclose(ptr_usb1); // closing the file
fclose(ptr_usb2); // closing the file
}
break; // to stop the while loop
fclose(ptr_readfile); // closing the file
}
return 0;
}
答案 0 :(得分:0)
很多事情都不太对劲。您需要仔细查看编译器报告的警告 - 如果可能,启用所有警告(例如“-Wall”) - 并解决所有问题。然后使用调试器单步执行程序,直到它执行您不期望的操作。
作为起点,而不是:
fwrite(cUsb1 , str , str , ptr_usb1);
你可能意味着
fwrite(&cUsb1 , 1 , 1 , ptr_usb1);
该行应该有一个警告告诉你不应该尝试传递cUsb1(一个char)作为fwrite的第一个参数,因为该参数需要一个指针,即某个地址。使用&amp; cUsb1表示“cUsb1的地址”。
答案 1 :(得分:0)
您可以使用fputc一次写入一个字符。此外,不需要while循环。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c;
int i = 0;
FILE *ptr_readfile = NULL;
FILE *ptr_usb1 = NULL;
FILE *ptr_usb2 = NULL;
ptr_readfile = fopen("Dutch People.txt", "r"); // open readfile
if (ptr_readfile != NULL) {
ptr_usb1 = fopen("USB1.txt", "w"); // create and open USB1 file
ptr_usb2 = fopen("USB2.txt", "w"); // create and open USB2 file
if (ptr_usb1 != NULL && ptr_usb2 != NULL) {
while ((c = fgetc(ptr_readfile)) != EOF) {
if (i % 2 == 0) {
fputc(c, ptr_usb1);
}
else {
fputc(c, ptr_usb2);
}
i++;
}
}
fclose(ptr_readfile); // closing the file
}
if (ptr_usb1 != NULL) {
fclose(ptr_usb1);
}
if (ptr_usb2 != NULL) {
fclose(ptr_usb2);
}
return 0;
}