2015-05-21 5 views
0

У меня проблема с моим проектом. Я не знаю, как добавить параметр, который будет сохранен для файла результата с консоли. Я думаю, что я использую 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

У вас есть серьезная ошибка: 'n' не инициализируется перед' while (n! = EOF) 'suggest' while ((n = fgetc (plik))! = EOF)'. –

+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) 
+0

спасибо, круто, но результаты разные. Я должен учитывать и сортировать знаки из входного файла mu. Теперь у меня в результате получается таблица ascii без знаков из моего файла. – user3679378

+0

Хорошо, спасибо. Это хорошо работает сейчас :) – user3679378

Смежные вопросы