我的项目出了问题。我不知道如何添加一个选项,该选项将保存以从控制台提交结果。我想我应该使用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);
}
}
答案 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)