无法让 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;
}