如何保存到文件?

时间:2015-05-21 13:40:47

标签: c printf

我的项目出了问题。我不知道如何添加一个选项,该选项将保存以从控制台提交结果。我想我应该使用fprintf,但没有任何作用。请帮忙; D

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

struct symbole
{
    int symbol;
    int czestosc;
};

struct symbole nowy[256];

void odczytIwyznaczenie(void);
void wyswietl(struct symbole nowy[]);
void sortuj(struct symbole nowy[]);

int main()
{
    odczytIwyznaczenie();
    sortuj(nowy);
    wyswietl(nowy);
    getchar();
    return 0;
}


void odczytIwyznaczenie (void)
{

    FILE *plik;
    char n;
    int i;


    for (i=0; i<256; i++)
    {
        nowy[i].czestosc=0;
        nowy[i].symbol=i;
    }

    plik = fopen("plik.txt","r");
    if (plik == NULL)
    {
        printf("Blad odczytu!");
        getchar();
        exit(1);
    }

    while (n != EOF)
    {
        n = fgetc(plik);

        for(i=0; i<256; i++)
        {
            if (nowy[i].symbol == n)
            {
                nowy[i].czestosc++;
                break;
            }

        }

    }
    fclose (plik);
}


void sortuj(struct symbole nowy[])
{
    int i, j, temp, temp1;

    for (i = (256); i > 0; i--)
    {
        for (j = 1; j <= i; j++)
        {
            if (nowy[j-1].czestosc < nowy[j].czestosc)
            {
                temp = nowy[j-1].czestosc;
                temp1=nowy[j-1].symbol;
                nowy[j-1].czestosc = nowy[j].czestosc;
                nowy[j-1].symbol=nowy[j].symbol;
                nowy[j].czestosc = temp;
                nowy[j].symbol=temp1;
            }
        }
    }
}

void wyswietl(struct symbole nowy[])
{
    int i;
    for (i=0; i<256; i++)
    {
        if (nowy[i].czestosc!= 0)
            printf ("%5d| %5c| %5d\n", nowy[i].symbol, nowy[i].symbol, nowy[i].czestosc);
    }
}

1 个答案:

答案 0 :(得分:0)

您确实需要fprintf(),请按以下方式使用

void wyswietl(struct symbole nowy[])
{
    FILE *output;
    int   i;

    output = fopen("OuptputFile.txt", "w");
    if (output == NULL) /* maybe you don't have permission to create the file */
        return;
    for (i = 0 ; i < 256 ; i++)
    {
        if (nowy[i].czestosc == 0)
            continue;
        fprintf(output, "%5d| %5c| %5d\n", nowy[i].symbol, 
            nowy[i].symbol, nowy[i].czestosc);
    }
}

此外,您必须先初始化n,然后再将其与EOF进行比较,然后再进行更改

while (n != EOF)

n初始化之前到达

while ((n = fgetc(pilk)) != EOF)