无法让 fwrite 正常工作
Can't get fwrite to work properly
我正在尝试编写一个能够打开文本文件并将其拆分的程序,以便我可以将其保存为两个新文件以更快地保存文件。但是使用我现在拥有的代码,我无法将从原始文件中选择的字符打印到新文件中。
在我的文本文件中有文本 "Dutch people are tall"。
在我的新文件中,我想获得:
文件 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;
}
很多地方不太对劲。您需要仔细查看编译器报告的警告 - 如果可能,启用所有警告(例如“-Wall”) - 并解决所有问题。然后使用调试器单步执行您的程序,直到它执行您没有预料到的操作。
作为起点,而不是:
fwrite(cUsb1 , str , str , ptr_usb1);
你可能是说
fwrite(&cUsb1 , 1 , 1 , ptr_usb1);
该行应该有一条警告,告诉您不应尝试将 cUsb1(一个字符)作为 fwrite 的第一个参数传递,因为该参数需要一个指针,即某物的地址。使用 &cUsb1 表示 "the address of cUsb1".
您可以使用 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;
}
我正在尝试编写一个能够打开文本文件并将其拆分的程序,以便我可以将其保存为两个新文件以更快地保存文件。但是使用我现在拥有的代码,我无法将从原始文件中选择的字符打印到新文件中。
在我的文本文件中有文本 "Dutch people are tall"。
在我的新文件中,我想获得: 文件 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;
}
很多地方不太对劲。您需要仔细查看编译器报告的警告 - 如果可能,启用所有警告(例如“-Wall”) - 并解决所有问题。然后使用调试器单步执行您的程序,直到它执行您没有预料到的操作。
作为起点,而不是:
fwrite(cUsb1 , str , str , ptr_usb1);
你可能是说
fwrite(&cUsb1 , 1 , 1 , ptr_usb1);
该行应该有一条警告,告诉您不应尝试将 cUsb1(一个字符)作为 fwrite 的第一个参数传递,因为该参数需要一个指针,即某物的地址。使用 &cUsb1 表示 "the address of cUsb1".
您可以使用 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;
}