2016-02-17 4 views
0

Вот мой код. Я отлично умею сортировать файлы, содержащие цифры, но не знающие, когда дело доходит до персонажей. Он принимает файл по моему выбору и выводит другой файл с отсортированным массивом. Но пока все, что я получаю, - это пустые файлы, и я не могу понять, почему.Организация массива символов с использованием сортировки пузырьков

Так как я могу исправить свой код, чтобы отсортировать массив символов, а затем вывести его?

#include <stdio.h> 

int bubble_sort(char *a, int n); 

int main(void) { 
    char a[10]; 
    int n = sizeof a/sizeof a[10]; 
    int i; 
    char inname; 
    char outname; 

    printf("Enter input name: "); 
    scanf("%s", &inname); 
    printf("Enter output name: "); 
    scanf("%s", &outname); 

    FILE *in, *out; 

    out = fopen(&outname, "w"); 

    if ((in = fopen(&inname, "r")) == NULL) { 
     printf("File not found\n"); 

    } 


    else { 
     for (int i = 0; i < 10; i++) 
     { 
      fscanf(in, "%s ", &a[i]); 
     } 

     bubble_sort(a, n); 

     for (i = 0; i < 10; i++) { 
      printf("%s\n", a[i]); 
      fprintf(out, "%s\n", a[i]); 
     } 
    } 

     fclose(in); 
     fclose(out); 
     return 0; 
    } 


int bubble_sort(char *a, int n) { 
    int i, j; 
    char temp; 

     for (j = 1; j<n; j++) 
     { 
      for (i = 0; i<n - j; i++) 
      { 
       if ((int)a[i] >= (int)a[i + 1]) 
       { 
        temp = a[i]; 
        a[i] = a[i + 1]; 
        a[i + 1] = temp; 

      } 
     } 
    } 
    return a[i]; 
} 
+0

Совет: измените 'int n = sizeof a/sizeof a [10];' -> 'int n = sizeof a/sizeof a [0];' –

+0

Похож на путаницу между * символами * и * строками * является основным вопросом проблемы. –

+0

Возможно, вы хотите изменить 'fscanf (in,"% s ", &a[i]);' to 'fscanf (in,"% c ", &a[i]);' –

ответ

2

Основная проблема, как я могу видеть, это с

scanf("%s", &inname); 

В вашем коде, inname является одной char, который не может держать строки входы. Вам понадобится массив.

Вы должны изменить

char inname; 
char outname; 

в

#define NAMSIZ 32 

char inname[NAMSIZ] = {0}; 
char outname[NAMSIZ] = {0}; 

, а затем,

scanf("%31s", inname); 

и соответственно.

Такая же проблема есть fscanf(in, "%s ", &a[i]);, тоже.

+0

Спасибо за помощь. Я изменил то, что вы предложили, но все еще не работает, как я надеялся. Что вы имели в виду под «той же проблемой существуют с 'fscanf (in,"% s ", &a[i]);' тоже. "(Я довольно новичок в кодировании, если честно: P) – JDCode

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